我有这个密码:
WebElement iframeElement = driver.findElement(By.xpath(xpIframe));
driver.switchTo().frame(iframeElement);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpLucka)));
driver.findElement(xpLucka).click(); //this click fails
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpSvara))); //TimeoutException
driver.findElement(xpSvar).click();
driver.findElement(xpSvara).click();
它经常在带有注解//timeoutexception的行中失败。当我在浏览器中查看网页处于打开状态时,很明显,单击该行之前的操作失败了。这让人困惑。元素显然就在那里,我发现它在webinspector中没有问题,而且前一行的wait.until显然成功了。
接下来我要确保的是 switchTo()
声明。如何验证要呼叫的交换机?
注意,is也经常成功。我只是在一个循环中运行了9次,失败了5次,但成功了4次。
当然,任何其他关于为什么会发生这种情况的建议都是非常受欢迎的。
2条答案
按热度按时间des4xlb01#
至
click()
在<iframe>
所以你必须:将所需框架的webdriverwait诱导为可用,然后切换为可用。
诱导webdriverwait使所需的元素可选择。
可以使用以下定位器策略:
参考
您可以在以下内容中找到一些相关的讨论:
iframe下文档的处理方法
在SeleniumWebDriverJava中,不使用driver.switchto().frame(“framename”)就可以切换到框架中的元素吗?
mwyxok5s2#
我在自动化测试中遇到了一些困难,webdriverwait并不总是有效的。正如你可能已经知道的那样,睡眠(3000);当涉及到自动化测试时,不推荐使用它,但是有时您必须使用它。因此,出于测试目的,我有意使用: