使用硒选择选项的最快方法?

时间:2013-11-08 20:58:04

标签: c# testing xpath selenium selenium-webdriver

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

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

这是我目前的代码:

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

2 个答案:

答案 0 :(得分:2)

这是我最终做的事情。我使用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);

答案 1 :(得分:1)

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

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

Selenium中的FindBy Interface将允许您使用以下内容:

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

我总是喜欢个人使用id和xpath。但是,根据您的自动化程度以及它是如何开发的,其他机制也是必要的。