2016-11-26 34 views
0

這可能有點奇怪的問題,因爲我確信你每天都看不到這樣的事情。如何保存座標並稍後參考,使用C#和WebDriver?

我正在開發一個程序,它會自動處理一系列問題併爲用戶選擇正確的答案。它的工作方式是首先通過按下頁面上的一個按鈕「檢查答案」來解決問題,通過RGB顏色和(在不久的將來)找到正確答案,然後再次查看問題,這次根據我們之前收集的信息點擊正確答案。

這是問題;顯然,我不想只在一個問題上按下所有正確答案的座標,並且每一個問題都會這樣做!我想要做的是將保存的這些座標保存到一個變量中,以某種方式將它們與發現的任何問題相關聯,並在自動填寫正確答案時僅引用與該特定問題相對應的座標。

我基本上說的是我想將某些座標與頁面的某些「部分」關聯起來。

下面是一些程序代碼:

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); 
    //Save coordinate(s) to variable pertaining to specific question? 
} 

上面的代碼是在我的程序循環。一旦它獲得了與特定RGB顏色匹配的所有座標,它就會轉到下一個問題,並且它將再次運行該代碼。我希望能夠將element.Location.Xelement.Location.Y保存爲變量,無論它出現什麼問題。

+0

你肯定的答案並非每次都問洗牌?你怎麼知道每次座標都完全相同?如果你確定答案沒有被洗牌,我會按照答案的索引而不是座標進行。頁面上的座標可能會受很多因素影響...索引不會。 – JeffC

+0

Hi @JeffC;我知道這樣一個事實,即問題和答案不會以任何方式拖垮。基本上,現在寫東西的方式,我的WebDriver通過識別正確答案的顏色找到所有東西,但是您認爲這不是實現此目的最實際的方法。當你說,「我會按照答案的索引去做」,你到底提出了什麼,我用這個機制來取代?我誠實地想不出任何其他方式在頁面上找到正確的答案(由於頁面是結構化的)。如果可能,我可以有代碼示例嗎? – MTS11648

+0

如果您將發佈HTML示例,我會嘗試發佈代碼示例。我基本上假設答案是單選按鈕或類似的。你可以爲一個給定的問題捕獲它們的集合,然後發現第三個答案是正確的,然後在某處記錄Q1 A3而不是座標。 – JeffC

回答

0

像這樣的東西可能會奏效:)

public class QuestionElement 
{ 
    public IWebElement Element { get; set; } 

} 

public class QuestionItem 
{ 
    public string QuestionID { get; set; } 
    public list<QuestionElement> Elements; 
} 

public class QuestionItems 
{ 
    public SortedList<QuestionItem> Questions { get; set; } 
} 

public class PopulateQuestionItem() 
{ 


    public void AddQuestionResult(string questionID, QuestionItems questionItems, string colorItem) 
    { 
     IReadOnlyCollection<IWebElement> unfiltered = Driver.FindElements(By.CssSelector("*")); 

     List<IWebElement> filtered = unfiltered.Where(f => f.GetCssValue("color") == colorItem).ToList(); 
     QuestionItem questionItem = new QuestionItem() { QuestionID = questionID }; 

     foreach (IWebElement element in filtered) 
     { 
      QuestionElement item = new QuestionElement() 
      { 
       Element = element 

      }; 
      questionItem.ElementsAdd(item); 
     } 

     questionItems.Questions.Add(questionID, questionItem); 

    }  
相關問題