执行click atom时发生错误

时间:2013-02-21 13:32:40

标签: c# .net selenium webdriver selenium-webdriver

使用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);
}

1 个答案:

答案 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驱动程序的调用。该领域的一些代码已经过大修,至少应该可以使用更新的驱动程序从故障情况中提取更精确的错误。