[英]How to select a element if value/title contains a text
如果值包含“6 个月”,我一直在尝试找出如何获取该元素。 这是几个例子,我们可以看到所有这些值都有 6 个月这个词,这当然是不同的场景,所以我不想点击所有这些,但我给出了我需要点击的不同银行类型的例子
<input type="button" aria-label="AMEX 6 months Extended Payment Plan" title="AMEX 6 months Extended Payment Plan" value="AMEX 6 months Extended Payment Plan" class="pm-button pp-content-btn pm-button-half">
<input type="button" aria-label="DBS IPP 6 months 0%" title="DBS IPP 6 months 0%" value="DBS IPP 6 months 0%" class="pm-button pp-content-btn pm-button-half">
<input type="button" aria-label="UOBSG IPP 6 months 0%" title="UOBSG IPP 6 months 0%" value="UOBSG IPP 6 months 0%" class="pm-button pp-content-btn pm-button-half">
我想知道如果值/标题中包含“6个月”这个词,是否可以点击一个元素?
编辑:使用 protractor 进行测试
您可以使用包含 function 的 xpath 来实现此目的,如下所示:
element(by.xpath('//input[contains(@title,"6 months")]');
包含 function对于定位在属性或节点本身中包含某些文本的元素非常有用。
由于您不能使用 querySelectorAll,您可能会发现此 function 很有帮助:
如果您不依赖元素名称:
FindByAttributeValue("Attribute-Name", "Attribute-Value");
或者如果你这样做:
FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");
以及完整的 function 实现:
function FindByAttributeValue(attribute, value, element_type){
element_type = element_type || "*";
var All = document.getElementsByTagName(element_type);
for (var i = 0; i < All.length; i++){
if (All[i].getAttribute(attribute) == value){
return All[i];
}
}
}
完整的答案来自这里
这正是by.cssContainingText所做的(部分文本匹配器与 css 结合使用)
let elem = element(by.cssContainingText('[style]', '6 months'));
修订
一种做你需要的方法,但效率很低......你可以对 elementArrayFinder 使用.filter
多次,直到你将结果缩小到你需要的元素
但我会通过 2 个参数来寻找你需要的元素
let $elem = (bank, range) => element(by.xpath(`//input[contains(.,"${bank}") and contains(.,"${range}")]`));
根据需要更正 xpath。 但本质上,它会寻找一个input
元素,该元素与第一个参数和第二个参数部分匹配任何内容(属性、文本等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.