我正在编写脚本以在JIRA中选择并在下面的屏幕中输入值。
问题类型'是一个输入'具有自动完成属性的元素:
<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;
在输入&#39;输入类型&#39;的值后,其他字段如&#39;摘要&#39;灰了几秒钟。如果我尝试输入&#39;摘要&#39;现在,使用以下代码:
myDriver.findElement(By.id("summary")).sendKeys(summary);
汇总字段不会被输入,而是一个错误&#34;元素在缓存中找不到 - 也许页面自查找以来已经改变了。&#34;会发生的。
摘要&#39;的HTML代码领域是:
<input type="text" value="" name="summary" id="summary" class="text long-field">
&#13;
所以我想要的只是等待总结&#39;要启用的输入字段,然后将sendkey发送给它。我正在寻找像
这样的东西ExpectedConditions.presenceOfElementLocated
但我希望启用&#39;,而不是presenceOfElementLocated
或visibilityOfElementLocated
。我也不想使用Thread.sleep()
。
有什么建议吗?
答案 0 :(得分:9)
ExpectedConditions.elementToBeClickable(locator)
怎么样?
elementToBeClickable
检查元素是否已启用。
答案 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)