使用C#和Selenium,我正在构建一个自动脚本,其中我尝试从下拉列表中选择某个值(在.csv文件中指定值)。我得到了错误;
“执行click atom时发生错误(警告:服务器未提供任何堆栈跟踪信息)”
我不知道点击原子是什么,更不用说如何解决它...任何帮助都非常感激!
提前致谢
这是下拉列表的代码:
public bool isellHOSelectAdultsDroplist(string adults)
{
writeToLog(String.Format("Selecting adults from drop list"), this.GetType().Name);
String xpathString = HO_ADULT_SELECTION;
if(GpoExplicitWaitXpathElement(xpathString, 3, 5))
{
IWebElement dropListObjects = webDriver.FindElement(By.XPath(xpathString));
writeToLog(String.Format("DEBUG: Trying to click on appropriate number of adults..."), this.GetType().Name);
selectValueFromAdultDropList(dropListObjects, adults);
return true;
}
else
{
return false;
}
}
// ...这是我的选择方法
private void selectValueFromAdultDropList(IWebElement dropListObjects, string adults)
{
SelectElement manipulateDroplistObject = new SelectElement(dropListObjects);
manipulateDroplistObject.SelectByValue(adults);
String selection = manipulateDroplistObject.SelectedOption.Text;
int numberOfElements = manipulateDroplistObject.Options.Count;
writeToLog("Number of elements in Adult Droplist: " + numberOfElements, this.GetType().Name);
writeToLog("Selection from adult droplist: " + selection, this.GetType().Name);
}
答案 0 :(得分:1)
我会回答您提出的具体问题,即“什么是点击原子?” IE驱动程序中有相当多的功能,这个功能的实现取决于三个支柱。
首先是IE的COM接口。这些是十多年来用于自动化IE的各个部分的对象和方法。
第二项技术是所谓的“原生事件”。也就是说,使用操作系统级机制来执行用户交互,例如按键和鼠标点击。在Windows上,这意味着使用Windows SendMessage API。几乎在您使用键盘或鼠标与IE驱动程序的任何时候,您默认使用本机事件。
最后,IE驱动程序功能的很大一部分是使用JavaScript函数实现的,这些函数由所有浏览器共享。这些功能称为“automation atoms”。
使用本机事件进行鼠标操作的极少数例外情况之一是从<option>
元素中选择<select>
元素。由于IE不向<option>
元素提供可发现的维度,因此IE驱动程序被迫通过JavaScript模拟点击操作。这意味着使用自动化 atom 进行点击操作。在你的情况下,执行JavaScript时必定会出错,这被忠实地报告为“未能执行click atom”。没有更多细节,包括重现问题的示例HTML页面,诊断问题的根本原因将非常困难。
此时我将回应更新到最新IE驱动程序的调用。该领域的一些代码已经过大修,至少应该可以使用更新的驱动程序从故障情况中提取更精确的错误。