如何在Selenium WebDriver中等待输入元素启用?

10
我正在编写脚本来在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">

在输入“input type”值后,其余字段(如“summary”)会在几秒钟内变为灰色。如果我尝试立即输入“summary”字段的值,使用以下代码:

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

summary字段将不会被输入,而是会出现错误信息“未在缓存中找到该元素——也许页面自查以来已经发生了变化..”。

'summary'字段的HTML代码为:

<input type="text" value="" name="summary" id="summary" class="text long-field">

所以我想要的就是等待“摘要”输入字段变为启用状态,然后向它发送按键。我正在寻找类似于

的东西。

ExpectedConditions.presenceOfElementLocated 

但是我想要的是'启用',而不是presenceOfElementLocatedvisibilityOfElementLocated。我也不想使用Thread.sleep()

有什么建议吗?

2个回答

20

不错,我知道这个API,但之前只以为它能检查是否“可点击”,没有详细阅读API文档。 - user1559625
对我无效 - 页面在 elementToBeClickable 后仍在加载。 - SVK PETO

7
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或更高版本(带有guava 21)上运行。


请在您的答案中提供一些代码解释。 - Sapnesh Naik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接