首页  >  文章  >  Java  >  如何正确退出嵌套 iframe 并与 Selenium WebDriver 中的元素交互?

如何正确退出嵌套 iframe 并与 Selenium WebDriver 中的元素交互?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-30 20:55:30954浏览

How to Properly Exit Nested Iframes and Interact with Elements in Selenium WebDriver?

在 Java 中使用 Selenium WebDriver 处理 iframe

本文解决了使用 Java 与 Selenium WebDriver 中深度嵌套的 iframe 进行交互的挑战。具体来说,它关注的是选择外部 iframe 访问内部 iframe,在其 body 中输入文本,然后退出两个 iframe 以单击位于外部 iframe 中的按钮的场景。

问题并尝试

提供的代码片段最初按预期工作,并将文本输入到内部 iframe 的正文中。但是,当尝试退出两个 iframe 并单击“确定”按钮时,Selenium 会抛出异常,指示找不到按钮元素。

解决方案

解决这个问题的关键在于使用 driver.switchTo().defaultContent() 方法。此方法允许您退出所有当前选定的框架,有效地返回到主 HTML 文档。

修改的代码

要修复代码,请替换之前的退出尝试内部 iframe 包含以下内容:

<code class="java">// Remove the line with selenium.selectFrame("relative=up");
driver.switchTo().defaultContent(); // Exit both frames
driver.switchTo().frame("cq-cf-frame"); // Re-enter the outer iframe</code>

通过添加这些行,Selenium 将首先退出两个 iframe,然后重新进入外部 iframe。这可确保在尝试与“确定”按钮交互之前正确设置所有框架选择。

完整代码

修改后的代码应类似于以下内容:

<code class="java">driver.switchTo().frame("cq-cf-frame"); // Line 1
driver.findElement(By.css("#extdd-9 > div.tblRow > input.edititem")).click(); // Line 2
driver.switchTo().Frame("cq-gen379"); // Line 3
driver.findElement(By.id("CQrte")).sendKeys("Tnx"); // Line 4
driver.switchTo().defaultContent(); // Line 5, added to exit both frames
driver.switchTo().frame("cq-cf-frame"); // Line 6, added to re-enter outer frame
driver.findElement(By.xpath("//button[text()='OK']")).click(); // Line 6</code>

完成这些更改后,代码现在应该成功将文本输入内部 iframe 并单击外部 iframe 中的“确定”按钮。

以上是如何正确退出嵌套 iframe 并与 Selenium WebDriver 中的元素交互?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn