iframe - 在 Selenium WebDriver 中访问 iFrame 文档内的元素

标签 iframe shadow-dom

我正在尝试自动化一个场景,在该场景中我需要访问 iFrame 内的元素并继续我的测试。 我当前的问题是,我能够成功切换到 iframe,但无法访问框架内的内容。 iframe 内的内容是 Shadow DOM 内容,位于文档内。

HTML 代码如下所示::(请参阅附件 HTML )

我已经尝试过以下方法并得到 org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素

  1. 通过访问影子根

    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/

相关文章:

html - "Shadow DOM"的正确含义是什么?

javascript - 在 iframe 中模拟鼠标光标

javascript - 无法将 iframe 元素从指令传递给 Angular Controller

javascript - 嵌套元素(Web 组件)无法获取其模板

javascript - 如何序列化包含 Shadow DOM 的 HTML DOM?

html - 什么是#shadow-root,为什么它在我的字体类中没有显示?

html - 网站上的连续音乐

html - 如何在 PhoneGap 应用程序中嵌入 iframe?

html - Google 跟踪代码管理器集成安全性 - noscript iframe 沙盒

javascript - 如何使用 chrome 扩展程序在网页中注入(inject)模板组件?