gpt4 book ai didi

selenium-webdriver - 如何正确地将 shadow DOM CSS 选择器转换为非 shadow-DOM 选择器

转载 作者:行者123 更新时间:2023-12-01 02:10:37 28 4
gpt4 key购买 nike

我想使用不支持 Shadow-DOM 的浏览器(如 Firefox、PhantomJS 以及其他使用 WebDriver 的浏览器)测试 Polymer 应用程序。
当我使用类似的东西时,Firefox 和 PhantomJS 的 WebDriver 命令失败

driver.findElement(const By.cssSelector('* /deep/ #some-div'));

当无法应用 polyfill 时,是否有一些规则如何最好地翻译/近似这些选择器:
  • /deep/
  • ::shadow
  • :host()
  • :host-context()
  • :content

  • 我想创建一个函数,在发送请求之前,为不支持它们的浏览器自动将此类选择器转换为非影子 DOM 选择器,为此我需要知道如何翻译它们。

    最佳答案

    问题有点老了,但以防万一你自己还没有弄清楚。

  • /deep/ (已弃用):正如您在回答中所说,在大多数情况下只需将其删除即可。
  • ::阴影 (已弃用):也可以删除。如果您的目标节点不是宿主元素影子根的直接子节点,则用 > 替换它可能不起作用。
  • :host() 伪类用于从 中选择自定义元素内 shadow-dom,在不支持的浏览器中,它等于从子元素中选择父元素。因为我们don't have parent selectors在 css 中并且您正在编写 js 进行转换,您可以识别宿主元素的 tagName 并使用它代替 :host 选择器。类似以下内容:


  • :host {
    opacity: 0.4;
    transition: opacity 420ms ease-in-out;
    }
    :host(:hover) {
    opacity: 1;
    }
    :host(:active) {
    position: relative;
    top: 3px;
    left: 3px;
    }
    /*Convert it to*/

    x-element {
    opacity: 0.4;
    transition: opacity 420ms ease-in-out;
    }
    x-element:hover {
    opacity: 1;
    }
    x-element:active {
    position: relative;
    top: 3px;
    left: 3px;
    }


  • :主机上下文(<selector>)伪类匹配宿主元素,如果它或其任何祖先匹配 <selector> .例如:
    仅当自定义元素是类 .different 的元素的后代时,以下规则才适用于自定义元素。 .


  • :host-context(.different) {
    color: red;
    }
    <body class="different">
    <x-foo></x-foo>
    </body>


    用任何简单的东西替换这个并不容易。偶 webcomponents polyfill不尝试。我想不出任何 css 唯一的方法来实现这一点。
  • ::内容目标宿主元素的分布式子节点,即使用内容选择器选择显示的所有元素。用宿主元素的 tagName 替换::content 选择器应该在这里工作。即


  • ::content > h3 {
    color: green;
    }

    /*replace it with*/

    x-element h3 {
    color: green;
    }

    请注意,我已经删除了子选择器 >同样来自上面,因为在分发 h3 后不受支持的浏览器中将不再是 x-element 的直接后代。鉴于内容选择器的使用方式,我建议在任何可用的地方也删除子选择器。

    关于selenium-webdriver - 如何正确地将 shadow DOM CSS 选择器转换为非 shadow-DOM 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29806506/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com