【问题标题】:Angularjs Protractor: Valid Selector for excluding nested elementsAngularjs Protractor:排除嵌套元素的有效选择器
【发布时间】:2014-08-21 07:18:33
【问题描述】:

我想查询特定元素。

我的代码结构如下:

HTML

<ul class="main">
    <li>...</li>
    <li>...</li>
    <li>
        <ul class="to--exclude">
            <li>...</li>
            <li>...</li>
        </ul>
    </li>
    <li>...</li>
    ...
</ul>

我想在 'mainclass but not forli'swhich are insideto-exclude` 类中测试 li's 的存在。

问题是如果我使用element(by.css('.main li')),它将找到所有li's,包括to-exclude类中的那些。

Chrome 的开发者工具中,我可以使用 JQuery 的 :not.not() 准确定位它们。

$('.main li').not('ul.to--exclude li')
// OR
$(".main li:not('ul.to-exclude li')");

protractor 中用作

element(by.css('.main li').not('ul.to--exclude li'));
// OR
element(by.css(".main li:not('ul.to--exclude li')"));

以上代码报错:

InvalidElementStateError: invalid element state: Failed to execute 'querySelectorAll' on 'Document': '.main li:not('ul.to--exclude li')' is not a valid selector.

如何在量角器中完成相同的操作。如何排除一些嵌套在父定位器类中的类。

谢谢

【问题讨论】:

标签: javascript html css-selectors protractor nested-lists


【解决方案1】:

您应该可以像这样使用 CSS 伪类 :not 来做到这一点:

element(by.css(".main > li > ul:not(.to--exclude) li, .main > li)"));

我会将.main &gt; li 添加为备用选择器,因为您似乎想选择.main 下的所有子lis。这种选择器适用于这种情况:

<ul class="main">
    <li>...</li>
    <li>...</li>
    <li>
        <ul class="to--exclude">
            <li>...</li>
            <li>...</li>
        </ul>
    </li>
    <li>
        <ul class="to--include">
            <li>...</li>
            <li>...</li>
        </ul>
    </li>
    ...
</ul>

如果您没有像 .to--include 这样的其他 uls,您可以将选择器缩小为:

element(by.css(".main > li)"));

【讨论】:

猜你喜欢
  • 2016-11-24
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
相关资源
最近更新 更多