首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个卷影根下的href中单击卷影根

在多个卷影根下的href中单击卷影根
EN

Stack Overflow用户
提问于 2018-09-11 20:44:19
回答 1查看 289关注 0票数 0

我在几个shadowRoots中有一个链接列表。已经解决了这个问题。

代码语言:javascript
复制
public WebElement expandRootElement(WebElement element) {
    WebElement ele = (WebElement) ((JavascriptExecutor) driver).executeScript("return arguments[0].shadowRoot",element);
    return ele;
}

WebElement root5_adminPanel = shadowRoot4_MduiContainerChild2.findElement(By.cssSelector("#layout > border-layout > ng-view > admin-panel"));
WebElement shadowRoot5_AdminPanel= expandRootElement(root5_adminPanel);

WebElement root6_breadCrumb = shadowRoot5_AdminPanel.findElement(By.cssSelector("#layout > border-layout > breadcrumb"));
WebElement shadowRoot6_breadCrumb = expandRootElement(root6_breadCrumb);

WebElement root6_domainPanel = shadowRoot5_AdminPanel.findElement(By.cssSelector("#layout > border-layout > ng-view > gdsr-domain-panel"));
WebElement shadowRoot6_domainPanel = expandRootElement(root6_domainPanel);

WebElement root7_selectDomain = shadowRoot6_domainPanel.findElement(By.cssSelector("#domainContainer > domain-panel-item.ng-binding.last"));
WebElement shadowRoot7_selectDomain = expandRootElement(root7_selectDomain);

当我到达这个shadowRoot7时,我有一个同名的项目列表,我已经创建了一个列表来修复它。

代码语言:javascript
复制
List<WebElement> rows_table = shadowRoot6_domainPanel.findElements(By.cssSelector("#domainContainer > domain-panel-item:nth-child(n)"));

(大概有45个项目)

这将选择所有的行,在本例中是所有的domain-panel-item行。

我的问题是,每个域面板项目仍然包含另一个shadowRoot (所有项目的路径都相同),我想随机选择一个项目,而不是第一个或最后一个项目,例如,项目编号43。

enter image description here

我的解决方案是这样的,但它不起作用,因为它不能访问我想要的链接:

代码语言:javascript
复制
public void clickSelectedDomain(String domain) {
    List<WebElement> rows_table = shadowRoot6_domainPanel.findElements(By.cssSelector("#domainContainer > gdsr-domain-panel-item:nth-child(n)"));

    int rows_count = rows_table.size();

    for (int row=0; row<rows_count; row++) { 
        if(rows_table.get(row).getAttribute("href").contains(domain)) {
            rows_table.get(row).click();
        }
    }
}

有些人知道如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2018-09-15 05:01:53

你解决了这个问题,通过递归调用executeScript()来获得重叠的影域,但实际上你可以只调用executeScript()一次,然后在里面相继获得影域。

代码语言:javascript
复制
driver.executeScript( function ()
{       
    var root1 = document.querySelector( 'selector string 1' ).shadowRoot 
    var root2 = root1.querySelector( 'selector string 2' ).shadowRoot
    var root3 = root2.querySelector( 'selector string 3' ).shadowRoot
    ...
    return foundElement
}

无论如何,在for() {}循环中,您应该最后一次提取最终的Shadow DOM,然后选择<a>元素来检查其内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52276280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档