我的UI测试在一个下拉列表中失败,其中包含很多选项(大于1000)。错误消息是“对URL的远程WebDriver服务器的HTTP请求...在60秒后超时”。
现在我承认在下拉列表中有很多选项并不好,但我现在无法改变它。话虽这么说,使用Selenium选择文本选项的最快方法是什么?我可以使用xpath获得任何速度来查找选项,还是有其他方法可以做到这一点?感谢。
这是我目前的代码:
var fieldElement = driver.FindElement(dropDownLocator);
var select = new SelectElement(fieldElement);
select.SelectByText(value);
答案 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。但是,根据您的自动化程度以及它是如何开发的,其他机制也是必要的。