จะรอให้ element.all ได้รับการแก้ไขได้อย่างไร

ฉันกำลังพยายามค้นหาดัชนีของรายการจากมุมมองรายการ เพื่อค้นหาดัชนีที่ฉันใช้ฟังก์ชันนี้

    function restFunction(appName) {
     var indexForItem = 0;
     var a = element.all(by.repeater("app in itemList").column("app.itemName")).each(function (element, index) {
            element.getText().then(function (name) {
                console.log("Name is " + name);
                if (name == "sam") {
                    indexForItem = index + 1;
                    console.log("Ïndex is " + indexForItem );
                    a = index;
                }
            });
        });

        return a;
    }

ในไม้โปรแทรกเตอร์ ฉันจะรอให้คำสัญญาข้างต้นได้รับการแก้ไขได้อย่างไร ตอนนี้เมื่อฉันเรียกส่วนที่เหลือของฉัน ฉันมักจะได้รับสัญญาในสถานะรอดำเนินการ


person SandyRocks    schedule 14.03.2017    source แหล่งที่มา


คำตอบ (1)


รหัสของคุณดูไม่ถูกต้องโดยเฉพาะค่าที่ส่งคืน คุณกำลังส่งคืนการเรียกใช้ฟังก์ชัน - element.all(locator).each(eachFunction) ซึ่งจะส่งคืนสัญญาซึ่งจะไม่แก้ไขอะไรเลย ตรวจสอบเอกสารที่นี่

การส่งคืน

!webdriver.promise.Promise คำสัญญาที่จะแก้ไขเมื่อมีการเรียกใช้ฟังก์ชันใน ElementFinders ทั้งหมด คำสัญญาจะถือเป็นโมฆะ

แม้ว่าคุณจะกำหนดค่าใหม่ในภายหลังในการโทร เนื่องจากโหมดเป็นแบบอะซิงก์ จึงไม่รอจนกว่าจะมีการกำหนดใหม่

คุณต้องเปลี่ยนเพื่อส่งคืนดัชนีโดยตรง

function restFunction(appName) {
    return element.all(by.repeater("app in itemList").column("app.itemName")).each(function (element, index) {
        return element.getText().then(function (name) {
            if (name === "sam") {
                return (index+1);
            }
        });
    });
}

และเมื่อคุณเรียกใช้ฟังก์ชัน - คุณต้องแก้ไขสัญญา

restFunction('').then(function _resolvePromiseOfCall(value){
    console.log('value')
})
person AdityaReddy    schedule 14.03.2017