簡體   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