如何在selenium webdriver中等待启用输入元素?

时间:2015-10-06 13:41:27

标签: html selenium-webdriver

我正在编写脚本以在JIRA中选择并在下面的屏幕中输入值。

enter image description here 问题类型'是一个输入'具有自动完成属性的元素:



<input type="text" autocomplete="off" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" class="text aui-ss-field ajs-dirty-warning-exempt" id="issuetype-field" aria-controls="issuetype-suggestions">
&#13;
&#13;
&#13;

在输入&#39;输入类型&#39;的值后,其他字段如&#39;摘要&#39;灰了几秒钟。如果我尝试输入&#39;摘要&#39;现在,使用以下代码:

myDriver.findElement(By.id("summary")).sendKeys(summary);

汇总字段不会被输入,而是一个错误&#34;元素在缓存中找不到 - 也许页面自查找以来已经改变了。&#34;会发生的。

摘要&#39;的HTML代码领域是:

&#13;
&#13;
<input type="text" value="" name="summary" id="summary" class="text long-field">
&#13;
&#13;
&#13;

所以我想要的只是等待总结&#39;要启用的输入字段,然后将sendkey发送给它。我正在寻找像

这样的东西
ExpectedConditions.presenceOfElementLocated 

但我希望启用&#39;,而不是presenceOfElementLocatedvisibilityOfElementLocated。我也不想使用Thread.sleep()

有什么建议吗?

2 个答案:

答案 0 :(得分:9)

ExpectedConditions.elementToBeClickable(locator)怎么样?

elementToBeClickable检查元素是否已启用。

https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#elementToBeClickable-org.openqa.selenium.By-

答案 1 :(得分:2)

public void waitForElementEnabled(final WebElement element) {
    try {
        getWait().until((ExpectedCondition<Boolean>) driver -> element.isEnabled());
    } catch (Exception e) {
        LOGGER.info(
                e + " : " + "Timed out waiting for element: " + element);
    }
}

等待是一个WebDriverWait,我们想要等到我们在启用WebElement时获得真正的响应。驱动程序是我的WebDriver实例,它是全局声明的。如果它超时而没有得到真实的响应,那么我就会让异常(以便测试继续)并显示一条消息,通知操作超时。 我正在使用Lambda表达式,因此您需要使用selenium 3.1或更高版本(使用番石榴21)