2016-11-21 66 views
0

爲了使我的程序工作,我需要找到一個獨特的元素(s)是一種特定的RGB顏色。基本上,我試圖看看是否有方法可以找到頁面上的所有元素,找到具有特定RGB顏色的元素並將其座標保存到變量中。有沒有什麼辦法可以通過RGB顏色找到元素? (WebDriver,C#)

這是可能的,如果是這樣,我該怎麼做呢?

示例代碼:

Console.WriteLine("Successfully found question set."); 
    Thread.Sleep(3000); 
    go: 
    try 
    { 
     if (!rage) 
     { 
      Random interval = new Random(); 
      int waitTime = interval.Next(1000, 10000); 
      Thread.Sleep(waitTime); 
     } 
     driver.FindElement(By.Id("btnCheckAnswer")).Click(); 
     //Insert font finding and coordinate saving here. 
     driver.FindElement(By.Id("bNext.Image")).Click(); 
     goto go; 
    } //Omitted the "Catch" section as it is unneccessary here. 

HTML樣本:http://pastebin.com/Y6Ye6Cqu

謝謝

MTS11648

+0

所有的ekements都是同一類型嗎? –

+0

「元素」是什麼意思?通常有許多像素組成的圖像,每個像素都是RGB顏色。你是在談論檢查每個圖像中的每個像素? –

+0

@JohnSchultz是的,他們都是文字。 – MTS11648

回答

0

從你的HTML,我假設所有的元素要檢查有相同的ID。這在技術上反對HTML標準,但它對我們有利,因爲我們可以只刮這些元素,然後檢查每個元素,看看它是否是正確的顏色。一旦你有一個元素,你可以使用它的顏色,.GetCssValue("color"),這將返回這種格式的RGB值,"rgba(180, 137, 59, 1)".你會注意到這是RGBA而不是RGB。你可以閱讀更多關於RGBA here。您需要將您期望的RGB值轉換爲RGBA,但這非常簡單... rgb(180, 137, 59)變爲rgba(180, 137, 59, 1).

下面的代碼使用指定的ID擦除所有元素,並根據預期顏色將其過濾爲新列表。從那裏我們可以循環訪問filtered集合,並使用.Location.[X|Y]來編寫每個元素的座標。

// IReadOnlyCollection<IWebElement> unfiltered = Driver.FindElements(By.Id("brdrQuestion.QuestionRenderer.StackPanel.MultiChoiceQuestionViewer.sp.StackPanel.RadioTextRegionViewer1.LayoutRoot.Panel.text.sp.rich.LayoutRoot.TextBlock")); 
IReadOnlyCollection<IWebElement> unfiltered = Driver.FindElements(By.CssSelector("*")); 
Console.WriteLine(unfiltered.Count); 
List<IWebElement> filtered = unfiltered.Where(f => f.GetCssValue("color") == "rgba(180, 137, 59, 1)").ToList(); 
Console.WriteLine(filtered.Count); 
foreach (IWebElement element in filtered) 
{ 
    Console.WriteLine(element.Location.X); 
    Console.WriteLine(element.Location.Y); 
} 
+0

不是所有的元素在網頁上都有相同的ID,他們只是非常相似。基本上我正在尋找的是我可以單獨根據其顏色識別元素,而不是他們的ID,類名等。 – MTS11648

+0

好的。你只需要改變第一個'.FindElements()'來獲取頁面上的所有元素。我只是希望縮小一點,讓它變得更快。我已經用這個改變更新了代碼。 – JeffC

+0

優秀的工作,謝謝。 – MTS11648

相關問題