1

我有一个 UI 测试在一个下拉列表中失败,其中包含很多选项(大于 1000)。错误消息是“对 URL 的远程 WebDriver 服务器的 HTTP 请求...在 60 秒后超时”。

现在我承认在下拉列表中有这么多选项并不是一个好习惯,但我目前无法更改。话虽如此,使用 Selenium 通过文本选择选项的最快方法是什么?我可以使用 xpath 来获得任何速度来查找选项,还是有其他方法可以做到这一点?谢谢。

这是我当前的代码:

            var fieldElement = driver.FindElement(dropDownLocator);
            var select = new SelectElement(fieldElement);
            select.SelectByText(value);
4

2 回答 2

3

这就是我最终要做的。我使用 IJavaScriptExecutor 并编写了一个脚本来查找具有特定文本的列表中的第一个选项。这个解决方案并不完美,如果在我的测试中我选择了列表底部的一个选项,它可能仍然会超时。在我的情况下,该选项根本不会影响功能,因此我可以在列表顶部附近选择一个选项,它会很快找到它。

var fieldElement = driver.FindElement(dropDownLocator);                       
var js = (IJavaScriptExecutor)driver;
var script = string.Format("$('#{0} option').each(function (){{if($(this).text() == \"{1}\"){{$(this).attr('selected', true);return false;}}}});", fieldElement.GetAttribute("id"), value);
js.ExecuteScript(script);
于 2013-11-12T14:17:00.060 回答
1

根据我的理解(和实践),使用id是与 Selenium 中的选择器交互的最快方式。以下是我在自动化代码中使用的一些示例选择器:

@FindBy(css = "p.productSKU") protected WebElement skuVal;
@FindBy(id="sku") protected WebElement sku; 
@FindBy(className = "reducedPrice") protected List<WebElement> reducedPrice;

但是FindBy Interface,Selenium 内部将允许您使用以下内容:

id, xpath, using, css, name, className, tabName, linkText, and partialLinkText

我个人更喜欢使用 id 和 xpath。但是,根据您要自动化的内容以及它是/如何开发的,其他机制也可能变得必要。

于 2013-11-08T21:06:51.013 回答