简体   繁体   English

Shadow DOM - 无法单击元素(Selenium webdriver nodejs)

[英]Shadow DOM - Unable to Click element (Selenium webdriver nodejs)

I am attempting to click an element in a shadow dom.我正在尝试单击 shadow dom 中的元素。 I am using Selenium Webdriver JS.我正在使用 Selenium Webdriver JS。 I currently get access the shadow root.我目前可以访问影子根。 I also can find an element.我也可以找到一个元素。 So I thought the last bit clicking it would be straight forward but cant find out how.所以我认为最后一点点击它会很直接,但不知道怎么做。 There is not much support for Shadow Dom with js. js对Shadow Dom的支持不多。

Line await element.click() is the offending code.行 await element.click() 是有问题的代码。 But cant work out how to click that element.但无法弄清楚如何单击该元素。

// This gets the shadow Root
async function getShadowRoot() {
    let shadowHost;
    await (shadowHost = await driver.wait(until.elementLocated(By.css("body > div.project > sn-component-va-web-client"))),5000);
    return driver.executeScript("return arguments[0].shadowRoot", shadowHost);   
};              
       
//This find element inside the shadow Dom.     
async function findShadowDomElement() {
    let shadowRoot;
    let element;
    await (shadowRoot = getShadowRoot());
    await shadowRoot.then(async (result) => {  
    await (element = result.findElement(By.css("div.menu-item.contact-support-clicker")));    
    await element.click()
    });                         
    return element
}                

I think i found a solution.我想我找到了解决方案。 Used nodeJs + selenium.使用 nodeJs + selenium。 It's work bad with return so i handle like this.退货不好,所以我这样处理。

const shadowHost = await driver.findElement(By.css("body > div.project > sn-component-va-web-client"));

const shadowRoot =  await driver.executeScript("return arguments[0].shadowRoot", shadowHost);

const elem = await shadowRoot.findElement(By.css("div.menu-item.contact-support-clicker"));

elem.click();

in my case its works.就我而言,它的作品。

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

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