我正在尝试自动化一个场景,我需要访问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浏览器上试过这个。
答案 0 :(得分:1)
所有
我终于设法解决了这个问题。 所以问题的解决方案是这样的。
- 页面上设计的框架实际上是隐藏的。 - 切换到主框架后,我不得不切换到隐藏框架。 - 然后很容易识别出这些元素。
我遇到的问题: 1.在Firefox浏览器中 - 当我检查过滤器'frame'时,在'Firefinder'中未检测到隐藏帧,该过滤器'frame'正在检测除隐藏帧之外的所有帧。 “Firepath”的情况也是如此 2.在Chrome浏览器中 - 虽然显示了主框架内的文档,但在内部遍历并未显示隐藏的iframe。
<强>解决方案:强> 在Firefox浏览器中,使用HTML选项卡检查元素有助于我识别主框架内的隐藏框架。 仔细遍历iframe隐藏文档对我有所帮助。 但是,我仍然不确定为什么Chrome浏览器“Inspect”不显示此框架。