量角器中的条件语句

conditional statement in protractor

从项目过滤列表中,我尝试单击一个项目 (SG11)。问题是项目排序列表和项目名称不断变化。所以我试着编码..

$('.mat-input-infix.mat-form-field-infix').click();
        element.all(by.css('.mat-option-text')).then(function(viewName) {
            console.log(viewName.length);
        for (var i = 0; i < viewName.length; i++) {

        if (viewName [i] == 'SG11') {
            element(by.css('.mat-option-text')).click();
        }
        else{
                console.log('invalid');
        }
        }}); 

});

但是它总是执行else语句。我在 if 条件下做错了什么以及如何单击该特定项目?请帮忙

DOM

<mat-option class="mat-option ng-star-inserted" role="option" tabindex="0" id="mat-option-4" aria-selected="false" aria-disabled="false"><!----><span class="mat-option-text">
            SG11 
        </span><div class="mat-option-ripple mat-ripple" mat-ripple=""></div></mat-option>

SG11_mhk

console

1) charAt(i) 将 return 只有一个 字符。 Char 永远不会等于 SG11;

2) 如果要检查相等性,请使用 === 而不是 ==

你的代码有一处错误如下:

element.all(by.css('.mat-option-text')).then(function(viewName) {
   // viewName represents all matched elements, 
   // rather than the text content of all matched elements

   if (viewName[i] == 'SG11') {  // therefor the if condition is no way to be True.

您可以在 element.all() 上调用 getText() 来读取元素的所有文本,代码如下:

$('.mat-input-infix.mat-form-field-infix').click();

let allOpts = element.all(by.css('.mat-option-text'));

allOpts.getText().then(function (viewName) {
    console.log(viewName.length);

    for (var i = 0; i < viewName.length; i++) {

        if (viewName[i] == 'SG11') {
            allOpts.get(i).click();
        }
        else {
            console.log('invalid');
        }
    }
});