Protractor 如何选择没有特定类的子元素的所有元素?

Protractor 如何选择没有特定类的子元素的所有元素?,protractor,Protractor,我正在使用量角器对Angular 2应用程序进行端到端测试(我对CSS很差劲) 我一直在尝试选择所有元素,这些元素没有(div)子元素和特定的类。他们可以有div的孩子,只是没有那个班的孩子 单个元素看起来(或多或少)如下所示: <div class="card" (click)="clickEvent.emit(generator.id)"> <div id="card-title-anchor"> <div class="c

我正在使用量角器对Angular 2应用程序进行端到端测试(我对CSS很差劲)

我一直在尝试选择所有元素,这些元素没有(div)子元素和特定的类。他们可以有div的孩子,只是没有那个班的孩子

单个元素看起来(或多或少)如下所示:

<div class="card"
     (click)="clickEvent.emit(generator.id)">

    <div id="card-title-anchor">

        <div class="card-img-top">
             <img src="{{generator.imageUrls.small}}">
        </div>

        <div *ngIf="!canFulfillAAC()" class="sold-overlay">
            <p>bla</p>
        </div>                  

        <div class="col-3 price-overlay">
            <p class="big-price">
                bla
            </p>    
        </div>
    </div>
</div>

布拉

布拉

我可以使用
元素.all(by.css('.card'))
获取所有“
.card
”元素

但是,如何只获取那些不包含带有
已售出覆盖层的子div的子div

编辑:
我删除了css标签。我主要关心如何使用量角器定位器来实现这一点-可以通过css选择器、xpath表达式或其他方式实现。

对不起,我不知道如何使用
css
选择器来实现,但可以通过
xpath
来实现:

element.all(by.xpath('//div[@class="card" and not(.//div[contains(@class, "sold-overlay")])]'))

如果
class
包含多个值,则最好匹配
@class=value
,因为它将匹配整个属性。这与使用
div.value
时的
css
不同,您也可以使用
filter()
方法来实现这一点

element.all(by.css(".card")).filter(function(cardElement){
    return cardElement.all(by.css(".sold-overlay")).count().then(function(count){
        return count == 0;
    });
});

有了CSS…你还不能。CSS中没有CSS,实际上没有任何父选择器。CSS将通过DOM向下(和相邻)级联。。。但不是向上。听起来你想要的是,嘿,CSS,找到所有没有这个子元素的div,然后返回并设置父元素的样式,这意味着你必须向上遍历。您可能需要使用一些javascript来解决您的问题。如上所述,我将使用javascript为card div分配一个额外的类。由于该类将仅用于量角器测试中的选择,因此我将使用类似“dragrator-”的前缀,以便明确它仅用于测试。仅使用CSS是不可能的。这个答案有一个更详细的解释:嗯哼!感谢您考虑到我对css选择器关注不够。但这并没有完全起作用。测试使
索引超出范围。试图访问索引为0的元素,但只有0个元素与locatorby(xpath,//div[@class=“card”和not(.//div[@class=“seld overlay”]))匹配。
乍一看,我甚至更希望这样做,而不是像我问题下的注释中所建议的那样,使用JavaScript添加额外的类。这对我来说似乎没有那么严重。嗯,这可能是因为你所有的
div
class=card
都有一个内部
div
class=“selled\u overlay”
。你必须分享整个结构,以确定你得到了什么。另一方面,我看到你刚刚用包含多个属性的
class
编辑了你的问题,请检查更新的答案。共享整个结构不会有帮助,因为所讨论的div的呈现依赖于绑定(
*ngIf=“!canFulfillAAC()”
)。很抱歉,该表达式不适用于我。做