繁体   English   中英

如果值/标题包含文本,如何 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">

我想知道如果值/标题中包含“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM