我正在尝试自动化一个场景,在该场景中我需要访问 iFrame 内的元素并继续我的测试。 我当前的问题是,我能够成功切换到 iframe,但无法访问框架内的内容。 iframe 内的内容是 Shadow DOM 内容,位于文档内。
HTML 代码如下所示::(请参阅附件 HTML )
我已经尝试过以下方法并得到 org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素
通过访问影子根
driver.switchTo().frame("iframe_id"); WebElement root1 = driver.findElement(By.className("class_abs")); WebElement shadowRoot1 = expandRootElement(root1);
这里 webdriver 无法通过类名找到元素。
2.使用Javascript执行器
driver.switchTo().frame("iframe_id");
JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", driver.findElement(By.xpath("button_xpath")));
此处 webdriver 无法访问 Xpath。
3. 切换到 IFrame 后使用正常的 Xpath。
我想知道是否需要先访问 iFrame 内文档的内容才能访问其元素。如果是这样的话,我该怎么办呢。
P.S- 在 Chrome 和 Firefox 浏览器上都尝试过此操作。
最佳答案
全部,
我终于成功解决了这个问题。 所以问题的解决是这样的。
-页面上设计的框架实际上被隐藏了。 -切换到主框架后我必须切换到隐藏框架。 -然后元素就很容易识别了。
我遇到的问题: 1. 在 Firefox 浏览器中 - 当我检查过滤器“框架”时,“Firefinder”中未检测到隐藏框架,该过滤器正在检测除隐藏框架之外的所有框架。 《Firepath》的情况也是如此 2.在Chrome浏览器中-虽然显示了主框架内的文档,但遍历内部并没有显示隐藏的iframe。
解决方案: 在 Firefox 浏览器中,使用 HTML 选项卡检查元素帮助我识别主框架内的隐藏框架。 仔细遍历 iframe 隐藏文档对我有帮助。 但是,我仍然不确定为什么 Chrome 浏览器“Inspect”不显示此框架。
关于iframe - 在 Selenium WebDriver 中访问 iFrame 文档内的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269237/