我们希望将一些键发送到由名称标识的元素。在应用程序中可能有多个具有相同名称的元素,但在这种情况下,只有一个是可见的。为此,我们有一个这样的代码片段(简单的代码,没有生产代码):
List<WebElement> list = driver.findElements(By.xpath("//[@name='title']"));
for (WebElement elem : list) {
try {
elem.sendKeys(value);
break;
} catch (Exception e) {
// ignore
}
}
如果标题元素还没有出现,我们使用隐式等待来等待它出现。所以通常这会很好。无论如何,我们有时会遇到这样的情况,即已经存在具有该名称的元素(但被隐藏了),而正确的元素只会由异步代码创建。但在这种情况下,代码将不起作用。由于findElements()
将立即返回(没有隐式等待),只返回不可见的元素。在这种情况下,sendKeys()
将等待元素变得可见,但这永远不会发生(忽略在 之后创建的新元素findElements
),因此它在隐式等待超时后失败。
基本上,我们需要有可能告诉findElements()
我们只想拥有可见元素。如果没有可见元素 Selenium 应该等待隐式等待持续时间。这可能吗?