【问题标题】:Reach for the nested element using Selenium WebDriver (Java)使用 Selenium WebDriver (Java) 获取嵌套元素
【发布时间】:2021-09-15 21:42:25
【问题描述】:

我想使用 Selenium 在 pdf-viewer 页面上单击“下载”按钮。这是该页面的 html 代码。

我想我需要使用switchTo().frame() 来获取标有红框的元素。为此,我使用以下 Java 代码。

driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='viewer']")));
driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='toolbar']")));
driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='downloads']")));

driver.findElement(By.xpath("//*[@id='download']")).click();

但它不起作用:(请给我一些解决问题的想法。提前谢谢你!

【问题讨论】:

    标签: java html selenium-webdriver xpath pdf-viewer


    【解决方案1】:

    根据屏幕截图,元素位于 shadow-root 和 Mode open。

    要在shadow DOM 中获取所需的元素,我们需要使用Javascript。

    你可以参考This Link与Shadom DOM互动

    代码是这样的:

    public class shadowdomexample {
        
        WebElement root1 = driver.findElement(By.id("viewer"));
    
        //Get shadow root element
        WebElement shadowRoot1 = expandRootElement(root1);
        
        WebElement root2 = shadowRoot1.findElement(By.id("toolbar"));
        WebElement shadowRoot2 = expandRootElement(root2);
        
        WebElement root3 = shadowRoot2.findElement(By.id("downloads"));
        WebElement shadowRoot3 = expandRootElement(root3);
        
        //This should return the required Element.
        WebElement DownloadsElement = shadowRoot3.findElement(By.cssSelector("cr-icon-button[id=downloads]"));
    
    }
    //Returns webelement
    public WebElement expandRootElement(WebElement element) {
        WebElement ele = (WebElement) ((JavascriptExecutor) driver)
    .executeScript("return arguments[0].shadowRoot",element);
        return ele;
    }
    

    【讨论】:

    • 您分享的链接是关于这个特殊案例的。我尝试了您建议的代码并使用了该文章中提到的建议,但所有这些选项都不起作用。问题甚至是获得对第一个影子 DOM 的访问权限。结果 - 异常:没有这样的元素:无法找到元素:{"method":"xpath","selector":"//*[@id='viewer']"
    • 你能分享链接吗?我的意思是网址?
    • 您是否尝试过使用 CSS 选择器在 shadow root 中查找元素。尝试使用 CSS 选择器找到downloads 。
    • 不幸的是,我不能。该网站仅供内部使用 :( 我尝试使用 css。同样的问题 - 没有这样的元素:无法找到元素。
    • 感谢您的宝贵时间!但是我仍然没有发现这样的元素异常......我知道如何以其他方式解决我的问题。现在我正在研究如何禁用 chrome pdf-viewer 扩展来直接下载文件。我快到了
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2019-06-04
    相关资源
    最近更新 更多