【发布时间】:2019-10-17 14:04:22
【问题描述】:
<label class="radio inline check">
<input class="input ng-new ng-valid" name="BookType" required="" type="radio">
<!---->
<!---->
Fiction
</label>
<label class="radio inline check">
<input class="input ng-new ng-valid" name="BookType" required="" type="radio">
<!---->
<!---->
NonFiction
</label>
<label class="radio inline check">
<input class="input ng-new ng-valid" name="BookTypeReal" required="" type="radio">
<!---->
<!---->
Fiction
</label>
<label class="radio inline check">
<input class="input ng-new ng-valid" name="BookTypeReal" required="" type="radio">
<!---->
<!---->
Fantasy
</label>
http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.filter
如果我使用
element.all(locator).filter(filterFn)
返回的文本为空。
如何去父元素<label> 获取文本?
label[class="radio inline check"]
返回 60 个元素,其中多个 getText 将返回相同的文本,因此它不会是唯一的。
input[name="BookType"]
返回两个元素,其中每个元素都是唯一的。
【问题讨论】:
-
您要测试的场景是什么?在我看来,selenium 测试应该总是知道他们在寻找什么,而不是试图用一些逻辑来弄清楚。因此,在这种情况下,您将寻找带有文本
Fiction或NonFiction的元素,而不是在值为静态时找出文本是什么。不过很难确定,因为我不确定你的情况。 -
@mrfreester 我正在尝试单击带有 Fiction 标签的单选按钮/标签
-
所以你需要
input?还是label?如果label有奇怪的空格,您可以尝试//label[text()='Fiction']或//label[contains(text(),'Fiction')]。如果您需要input,您可以在其末尾添加/input。如果您可以确认这是您正在寻找的并且有效,我可以发布作为答案。 -
@mrfreester //label[contains(text(),'Fiction')] 或 //label[text()='Fiction'] 不起作用。我更新了上面的代码以显示有许多标签具有相同的文本“小说”,使每个标签独一无二的是 input[name] 值。我想点击文本为 Fiction 和 的标签
-
我想我现在明白了。所以你在找这个?
//label[contains(text(),'Fiction') and ./input[@name='BookType']]。那是一个 xpath ......不幸的是 css 选择器没有选择父 :( 这太糟糕了,因为 css 选择器通常更容易阅读。
标签: selenium protractor