当前位置: 首页 > 知识库问答 >
问题:

使用子元素访问父阴影DOM元素

荣俊杰
2023-03-14

shadowdom结构:在上面的shadowdom结构中,我们可以在chrome中使用selenium和html" target="_blank">javascript访问各个元素,如下所示:

在Firefox中://div[@class='Style-Sconk-tabs'而不是(@隐藏)]//div/span[包含(text(),'AttrName')]/.../前驱兄弟姐妹::div/puch-icon-按钮[1]/铁图标[1]

在Chrome中:我们使用下面的图标导航到熨斗图标

WebElement Attrbuttona1=Button2.findElement(By.id("contentViewManager"));
        WebElement eAttrbutton1=expandRootElement(Attrbuttona1);
        WebElement Attrbutton2=eAttrbutton1.findElement(By.id("contentViewManager"));
        WebElement Attrbutton2a=Attrbutton2.findElement(By.xpath("rock-content-view[@name='entity-manage']"));
        WebElement eAttrbutton2=expandRootElement(Attrbutton2a);
        WebElement Attrbutton3=eAttrbutton2.findElement(By.id("content-view-container"));
        WebElement Attrbuttona3=Attrbutton3.findElement(By.id("component"));
        WebElement eAttrbutton3=expandRootElement(Attrbuttona3);
        WebElement Attrbutton4=eAttrbutton3.findElement(By.className("content"));
        WebElement AttrTagName2=Attrbutton4.findElement(By.tagName("rock-tabs"));
        WebElement eaAttrbutton4=expandRootElement(AttrTagName2);
WebElement Attrbutton5=eaAttrbutton4.findElement(By.id(attrType));
WebElement eAttr1=expandRootElement(Attrbutton5);
            WebElement Attr2=eAttr1.findElement(By.className("group-container"));       
            WebElement Attr3=Attr2.findElement(By.tagName("rock-attribute"));
            WebElement eAttr3=expandRootElement(Attr3);
            WebElement Attri4=eAttr3.findElement(By.className("attribute-icons"));
            WebElement Attr4=Attri4.findElement(By.tagName("paper-icon-button"));
            WebElement eAttr4=expandRootElement(Attr4);
            WebElement Attr5=eAttr4.findElement(By.tagName("iron-icon"));

            ((JavascriptExecutor) driver).executeScript("arguments[0].click();",Attr5);

public WebElement expandRootElement(WebElement element) {
        WebElement ele = (WebElement) ((JavascriptExecutor) driver)
                .executeScript("return arguments[0].shadowRoot",element);
        return ele;
    }

现在我想点击属性的铁图标,其中div/span[text()='产品名称']以子元素为基础,我需要遍历回阴影元素,并获得只与该特定属性相关的图标。

我怎样才能继续点击基于不同元素的元素并遍历回来,这应该在所有浏览器(chrome和火狐)支持?

共有1个答案

丁嘉
2023-03-14

在JavaScript中,如果要从名为element1的元素“向后遍历”:

>

  • 要获取父元素,请使用其parentElement属性。如果所需元素在树中的位置较高,则可以递归地执行此操作。

    element1.parent元素

    要获取shadowdom元素,请调用getRootNode()获取shadowdom根,并使用其host属性获取其主机元素。

    element1。getRootNode()。主机

    注意:因为它是JavaScript代码,所以应该在Selenium的executeScript()方法中执行。

  •  类似资料:
    • 我可以通过以下方式访问dev中的用户名: 有没有其他方法可以通过webdriver访问ShadowDOM元素?

    • 基本上,我想访问一个出现在打印预览弹出窗口中的按钮,这是一个阴影dom元素。我尝试了一些我在stackoverflow周围找到的解决方案,但是它们不起作用,就像我试图构建的当前代码一样,它是: 检查元素打印

    • 有没有可能用蟒蛇硒在阴影DOM中找到元素? 示例用例: 我用输入了这个

    • 量角器1.7.0引入了一个新特性:一个新的定位器,它有助于查找阴影DOM中的元素。 它涵盖哪些用例?您希望何时访问阴影DOM中的元素? 我问这个问题的原因是我错过了这个问题的动机部分——我认为量角器主要是一个有助于模仿真实用户交互的高级框架。访问阴影树听起来像是一件非常深入的技术事情,你为什么要这么做让我困惑。

    • 我需要使我的长方体阴影看起来像一个边框:如果我有一个具有插入的长方体阴影的父对象,并且我在其中放置了一个子div,则长方体阴影应该覆盖子div,如图所示,并带有边框: jsFiddle:http://jsfiddle.net/7rRsw/2/ 这个问题有没有类似于z索引或css黑客的东西? 编辑:我需要使用框阴影插入无边框或框捕捉。我正在寻找黑客,使这只可能与盒影。一种可能的方法是在子div的左右