selenium/java—是否可以验证driver.switchto().frame(元素)是否成功?

9vw9lbht  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(539)

我有这个密码:

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次。
当然,任何其他关于为什么会发生这种情况的建议都是非常受欢迎的。

des4xlb0

des4xlb01#

click()<iframe> 所以你必须:
将所需框架的webdriverwait诱导为可用,然后切换为可用。
诱导webdriverwait使所需的元素可选择。
可以使用以下定位器策略:

new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("xpIframe")));
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("xpLucka"))).click();

参考

您可以在以下内容中找到一些相关的讨论:
iframe下文档的处理方法
在SeleniumWebDriverJava中,不使用driver.switchto().frame(“framename”)就可以切换到框架中的元素吗?

mwyxok5s

mwyxok5s2#

我在自动化测试中遇到了一些困难,webdriverwait并不总是有效的。正如你可能已经知道的那样,睡眠(3000);当涉及到自动化测试时,不推荐使用它,但是有时您必须使用它。因此,出于测试目的,我有意使用:

Thread.sleep(3000); --> add some time, to make sure it switched to iframe
WebElement iframeElement = driver.findElement(By.xpath(xpIframe));  
driver.switchTo().frame(iframeElement);     
Thread.sleep(3000);
driver.findElement(xpLucka).click(); --> see if it will click on element
Thread.sleep(3000);
driver.findElement(xpSvar).click();
Thread.sleep(3000);
driver.findElement(xpSvara).click(); --> same for all other elements

相关问题