Angularjs量角器:用于排除嵌套元素的有效选择器

时间:2014-06-30 20:14:56

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

我想查询特定元素。

我的代码结构如下:

HTML

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

我想测试li's li class but not for至排除`类中的which are inside存在。

问题是,如果我使用element(by.css('.main li')),它会找到所有li's,包括to-exclude类内的:not

Chrome的开发人员工具中,我能够使用JQuery的.not()$('.main li').not('ul.to--exclude li') // OR $(".main li:not('ul.to-exclude li')"); 完全找到它们。

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.

上面的代码给出了错误:

{{1}}

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

由于

1 个答案:

答案 0 :(得分:3)

您应该可以使用CSS伪类:not这样做:

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

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

<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>

如果您没有ul之类的.to--include,则可以将选择器缩小为:

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