0

使用 C# 和 Selenium,我正在构建一个自动化脚本,其中我尝试从下拉列表中选择某个值(在 .csv 文件中指定的值)。我得到了错误;

执行点击原子时发生错误(警告:服务器未提供任何堆栈跟踪信息)”

我不知道点击原子是什么,更不用说如何修复它了......非常感谢任何帮助!

提前致谢

这是下拉列表的代码:

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);
}
4

1 回答 1

1

我将回答您提出的具体问题,即“什么是点击原子?” IE 驱动程序中有相当多的功能,而该功能的实现依赖于三个支柱。

首先是IE的COM接口。这些是十多年来用于自动化 IE 各个部分的对象和方法。

第二种技术是所谓的“原生事件”。也就是说,使用操作系统级别的机制来执行用户交互,例如按键和鼠标点击。在 Windows 上,这意味着使用 Windows SendMessage API。几乎任何时候您在 IE 驱动程序中使用键盘或鼠标时,您都默认使用本机事件。

最后,IE 驱动程序功能的很大一部分是使用 JavaScript 函数实现的,这些函数由所有浏览器共享。这些功能被称为“自动化原子”。

使用本机事件进行鼠标操作的极少数例外之一是<option>从元素中选择<select>元素。由于 IE 没有为<option>元素提供可发现的尺寸,IE 驱动程序被迫通过 JavaScript 模拟点击动作。这意味着使用自动化原子进行点击操作。在您的情况下,执行该 JavaScript 一定出错了,这被忠实地报告为“执行点击原子失败”。如果没有更多细节(包括重现问题的示例 HTML 页面),诊断问题的根本原因将非常困难。

在这一点上,我将响应更新到最新 IE 驱动程序的调用。这方面的一些代码已经过大修,至少应该可以使用更新的驱动程序从故障案例中提取更精确的错误。

于 2013-02-22T07:10:27.940 回答