检查一个元素内的所有文本在 Protractor 中是否相同

Check that all texts inside one element are the same in Protractor

我试图为这种情况找到逻辑和代码,但代码不起作用。这有点复杂,但我想获取所有 "summary" 元素并检查它们是否全部返回,因此我可以查明订单状态是否正确。尽管我不太清楚如何获取所有项目的状态并检查其中一个是否处于状态 "Returned" 或者是否所有项目都没有任何状态 类。有更简单的方法吗?

Html:

2 scenarios
Scenario 1:

<summary>Order Status:<span id="status_returned">Returned</span></summary>

<summary>Item Status:<span>Returned</span></summary>

<summary>Item Status:<span>Returned</span></summary>

<summary>Item Status:<span>Returned</span></summary>

Scenario 2:

<summary>Order Status:<span id="status_complete">Complete</span></summary>

<summary>Item Status:<span>Returned</span></summary>

<summary>Item Status:<span>Collected</span></summary>

<summary>Item Status:<span>Returned</span></summary>

量角器:

 var checkStatuses = element.all(by.cssContainingText('summary', 'Returned')).isPresent();
    checkStatuses.each(function(checkStatus) {
            if (checkStatus) {
                console.log("Checking if order status is Returned..");
                element(by.css('[id="status_returned"]')).waitReady().then(function(isResult) {
                    if (isResult) {
                        console.log("Order Status: Returned (PASS)");
                    } else {
                        throw "Error: Order Status is NOT Returned";
                    }
                });
            } else {
                console.log("Checking if item status is Returned..");
                element(by.css('[id="status_complete"]')).waitReady().then(function(isResult) {
                    if (isResult) {
                        console.log("Item(s) Status: Returned (PASS)");
                    } else {
                        throw "Error: Item(s) Status is NOT Returned";
                    }
                });
            }
        }),
        function(err) {
            throw err;
        };

您可以试试下面的代码片段。安装 'q' 包,因为以下代码片段使用 'q' 包。

var statusObjects = element.all(by.css('summary span'));
statusObjects.then(function(items) {
    var statusPromises = [];
    items.forEach((item) => {
        statusPromises.push(item.getAttribute('innerHTML'));        
    });
    var Q = require('q');
    Q.allResolved(statusPromises).then((results) => {
        var allStatusesAreReturned = true, noOfMismatches = 0;
        for(let i=0;i<results.length;i++) {
            if(results[i].state == 'fulfilled' && results[i].value != 'Returned') {
                allStatusesAreReturned = false;             
                noOfMismatches++;
            } 
        }
        if(allStatusesAreReturned) {
            console.log('All Statuses are returned');
        } else {
            console.log('Mismatch of status Returned in :'+noOfMismatches+' number of occurrences');
        }

    });
});