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

在Selenium WebDriver中访问iFrame文档中的元素,iframe,shadow-dom,Iframe,Shadow Dom,我正在尝试自动化一个场景,在这个场景中,我需要访问iFrame中的元素并继续我的测试。 我目前的问题是,我能够成功地切换到iframe,但无法访问框架内的内容。 iframe中的内容是shadowdom内容,位于文档中 HTML代码如下所示::(请参阅附件) 我已经试过下面的方法并得到了成功 org.openqa.selenium.NoSuchElementException:无此类元素:无法定位元素 通过访问阴影根 driver.switchTo().frame("iframe_id");

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

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

    三,。 切换到IFrame后使用普通Xpath

    我想知道是否需要先访问iFrame中的文档内容才能访问其元素。如果是这样的话,我该怎么做呢

    另外,在chrome浏览器和Firefox浏览器上都尝试过这个功能。

    All

    我终于设法解决了这个问题。 因此,问题决议是这样的

    -页面上设计的框架实际上是隐藏的。 -在切换到主帧之后,我不得不切换到隐藏帧。 -然后这些元素就很容易识别了

    我面临的问题: 1.在Firefox浏览器中,当我使用过滤器“frame”检查时,在“Firefinder”中未检测到隐藏帧,该过滤器正在检测除隐藏帧以外的所有帧。“壁炉”也是如此 2.在Chrome浏览器中-虽然显示了主框架内的文档,但遍历内部并没有显示隐藏的iframe

    解决方案: 在Firefox浏览器中,使用HTML选项卡检查元素有助于我识别主框架内的隐藏框架。 仔细遍历iframe隐藏文档对我很有帮助。 但是,我仍然不确定为什么Chrome浏览器“Inspect”没有显示这个框架