如何保存坐标并稍后参考,使用C#和WebDriver?
问题描述:
这可能有点奇怪的问题,因为我确信你每天都看不到这样的事情。如何保存坐标并稍后参考,使用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.X
和element.Location.Y
保存为变量,无论它出现什么问题。
答
像这样的东西可能会奏效:)
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);
}
你肯定的答案并非每次都问洗牌?你怎么知道每次坐标都完全相同?如果你确定答案没有被洗牌,我会按照答案的索引而不是坐标进行。页面上的坐标可能会受很多因素影响...索引不会。 – JeffC
Hi @JeffC;我知道这样一个事实,即问题和答案不会以任何方式拖垮。基本上,现在写东西的方式,我的WebDriver通过识别正确答案的颜色找到所有东西,但是您认为这不是实现此目的最实际的方法。当你说,“我会按照答案的索引去做”,你到底提出了什么,我用这个机制来取代?我诚实地想不出任何其他方式在页面上找到正确的答案(由于页面是结构化的)。如果可能,我可以有代码示例吗? – MTS11648
如果您将发布HTML示例,我会尝试发布代码示例。我基本上假设答案是单选按钮或类似的。你可以为一个给定的问题捕获它们的集合,然后发现第三个答案是正确的,然后在某处记录Q1 A3而不是坐标。 – JeffC