Bagaimana cara menunggu element.all diselesaikan?

Saya mencoba menemukan indeks suatu item dari tampilan daftar. Untuk mengetahui indeks saya menggunakan fungsi ini

    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;
    }

Di busur derajat bagaimana saya bisa menunggu janji di atas diselesaikan. Saat ini ketika saya memanggil restFunction saya, saya selalu mendapatkan janji dalam keadaan tertunda


person SandyRocks    schedule 14.03.2017    source sumber


Jawaban (1)


Kode Anda terlihat salah terutama, nilai yang dikembalikan. Anda mengembalikan panggilan fungsi - element.all(locator).each(eachFunction) yang akan mengembalikan Janji yang tidak akan menyelesaikan apa pun. Periksa dokumentasi di sini.

Kembali

!webdriver.promise.Promise Sebuah janji yang akan diselesaikan ketika fungsi telah dipanggil di semua ElementFinders. Janji itu akan menjadi nol.

Meskipun Anda akan menetapkan ulang nilainya nanti di dalam panggilan, karena modenya asinkron, mode tersebut tidak menunggu hingga penetapan ulang.

Anda harus mengubahnya untuk mengembalikan indeks secara langsung

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);
            }
        });
    });
}

Dan saat Anda memanggil fungsi tersebut - Anda harus menyelesaikan Janji tersebut

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