简体   繁体   English

使用 selenium 和 java 单击阴影 dom 锚标记的问题

[英]issue with clicking shadow dom anchor tag using selenium and java

I am learning selenium.我正在学习 selenium。 i was trying to automate an hyper link click in developer.salesforce.com website.我试图在 developer.salesforce.com 网站中自动点击超链接。 i wrote following code and when i execute the code i am getting JavascriptException in shadowContent.click() function saying Cannot read properties of undefined (reading 'defaultView') Element: [[org.openqa.selenium.remote.ShadowRoot@327af41b] -> css selector: .button.variant_primary.size-hero.font-display.icon-right]我编写了以下代码,当我执行代码时,我在 shadowContent.click() function 中得到 JavascriptException 说无法读取未定义的属性(读取'defaultView')元素:[[org.openqa.selenium.remote.ShadowRoot@327] > css 选择器:.button.variant_primary.size-hero.font-display.icon-right]

ChromeDriver driver = new ChromeDriver();
    driver.get("https://developer.salesforce.com");
    WebElement shadowHost = driver.findElement(By.xpath("//dx-button[@href='/get-started']"));
    SearchContext shadowRoot = shadowHost.getShadowRoot();
    WebElement shadowContent = shadowRoot.findElement(By.cssSelector(".button.variant_primary.size-hero.font-display.icon-right"));
    shadowContent.click();

If you want to click on Get Started Button, you can try like below:如果你想点击开始按钮,你可以尝试如下:

Frist try like:首先尝试如下:

driver.findElement(By.xpath("//dx-button[@href='/get-started']")).click();

In case if you get the same error then share the error with us.如果您遇到相同的错误,请与我们分享错误。

Or you can try the below:或者您可以尝试以下方法:

driver.manage().window().maximize();

JavascriptExecutor js = (JavascriptExecutor) driver; 

WebElement getStartedButton = (WebElement) js.executeScript("return document.querySelector('#maincontent > div > div > div > dx-button').shadowRoot.querySelector('a')");
// now you can click on get Started Button ...
getStartedButton.click();

Try this:尝试这个:

I tried, it is working fine.我试过了,它工作正常。

    JavascriptExecutor js = (JavascriptExecutor) driver;
            
    WebElement rootEle = driver.findElement(By.xpath("//dx-button[@href='/get-started']"));
            
//  SearchContext expandedRooEle = (SearchContext) js.executeScript("return arguments[0].shadowRoot", rootEle);
//  (Or)
    SearchContext expandedRooEle = rootEle.getShadowRoot();
            
    WebElement button = expandedRooEle.findElement(By.cssSelector(".button.variant_primary.size-hero.font-display.icon-right"));
    js.executeScript("arguments[0].click();", button);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM