如果 value/title 包含文本,如何 select 元素
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">
我想知道如果 value/title 中包含“6 个月”这个词,是否可以点击某个元素?
编辑:使用量角器进行测试
由于您无法使用 querySelectorAll,您可能会发现此功能很有用:
如果您不依赖于元素名称:
FindByAttributeValue("Attribute-Name", "Attribute-Value");
或者如果您这样做:
FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");
以及完整的功能实现:
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];
}
}
}
完整答案来自HERE
您可以使用包含函数的 xpaths 实现此目的,如下所示:
element(by.xpath('//input[contains(@title,"6 months")]');
contains function 对于定位在属性或节点本身中包含特定文本的元素非常有用。
这正是 by.cssContainingText 所做的(部分文本匹配器结合 css)
let elem = element(by.cssContainingText('[style]', '6 months'));
修订
1 种方法来做你需要的事情,但效率很低......你可以多次使用 .filter
来对抗 elementArrayFinder,直到你将结果缩小到你需要的元素
但我会通过 2 个参数查找您需要的元素
let $elem = (bank, range) => element(by.xpath(`//input[contains(.,"${bank}") and contains(.,"${range}")]`));
根据需要更正 xpath。但本质上它会寻找一个 input
元素,该元素与第一个参数和第二个参数
部分匹配任何内容(属性、文本等)
我一直在尝试找出如果值包含“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">
我想知道如果 value/title 中包含“6 个月”这个词,是否可以点击某个元素?
编辑:使用量角器进行测试
由于您无法使用 querySelectorAll,您可能会发现此功能很有用:
如果您不依赖于元素名称:
FindByAttributeValue("Attribute-Name", "Attribute-Value");
或者如果您这样做:
FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");
以及完整的功能实现:
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];
}
}
}
完整答案来自HERE
您可以使用包含函数的 xpaths 实现此目的,如下所示:
element(by.xpath('//input[contains(@title,"6 months")]');
contains function 对于定位在属性或节点本身中包含特定文本的元素非常有用。
这正是 by.cssContainingText 所做的(部分文本匹配器结合 css)
let elem = element(by.cssContainingText('[style]', '6 months'));
修订
1 种方法来做你需要的事情,但效率很低......你可以多次使用 .filter
来对抗 elementArrayFinder,直到你将结果缩小到你需要的元素
但我会通过 2 个参数查找您需要的元素
let $elem = (bank, range) => element(by.xpath(`//input[contains(.,"${bank}") and contains(.,"${range}")]`));
根据需要更正 xpath。但本质上它会寻找一个 input
元素,该元素与第一个参数和第二个参数