Действие щелчка транспортира зависит от ptor.sleep(). Как я могу решить правильно?

Я новичок, пытающийся не полагаться так сильно или вообще не использовать ptor.sleep() звонки, особенно после нажатия ниже. Строка ниже никогда не получает значение (все они возвращают Nan), если я не включу ptor.sleep(1000); позвонить после click() ниже.

Я предпринял различные попытки заставить массив разрешать элементы до результатов списка после щелчка, оборачивания щелчка в функции и т. Д., Но все, что я пробовал, работает без вызовов режима сна. Уже прочитал о транспортире управления потоком.

devCountString = parseInt(arr[i]);

Спасибо за любые идеи, может быть, что-то очевидное, что я пропустил, чтобы я мог удалить ptor.sleep() звонки.

моя спецификация:

describe('\n  == patch List suite results == \n', function() {

// login already was done in config files, onPrepare function.
var ptor, noFilterCount;

// needed here if we turn ptor.ignoreSynchronization = false;

beforeEach(function() {
    ptor = protractor.getInstance();
    ptor.ignoreSynchronization = true;
    browser.get('https://my.abc.com:3000/fixes');
    ptor.sleep(1200);
});  //end beforeEach()

it('11 - verify filter fewer', function() {

    var sevStringElm, sevString;
    var applicableCount;

    ptor.ignoreSynchronization = false;
        ptor.sleep(500);

    sevStringElm = element(by.css("input.form-control.bf-spinner"));
        sevStringElm.clear();
        ptor.sleep(500);

    sevStringElm.sendKeys( '8' );
        ptor.sleep(500);

// click on the "fewer" spinner, wrap the click to wrap the .
    var fewerPromise = element(by.css("span.bf-spinner-toggle:nth-child(2)")).click(); 
        ptor.sleep(1000);

// now get the list of clickable elements in each device card. by title 
    var applicableDevicesElm = element.all(by.css("[title$='Applicable\ Devices']"));
        applicableDevicesElm.getText().then(function(arr) {
            console.log("arr.length= "+arr.length);
            for (var i = 0; i < arr.length; i++) {
                devCountString = parseInt(arr[i]);
                expect(devCountString).toBeLessThan( 9 );
            };
        });
    });

1 ответ

Каждый раз, когда действие переходит к веб-драйверу, Protractor помещает его в очередь потока, как показано в документации. В результате, когда вы начинаете проверять свои элементы после щелчка, очередь должна была разрешить зависимости и подготовить ваше состояние для поиска. В любом случае, даже если вы не хотите иметь неявную упаковку, которую Protractor выполняет со своими действиями (которые всегда являются asyc), вы можете поместить .then(function(){}) после клика и вставьте логику пост-клика в эту анонимную функцию обратного вызова. На заметку, вы должны использовать ptor больше. использование browser вместо этого это смешивает в возможностях экземпляра транспортира. Пример: browser.sleep(1000)

Другие вопросы по тегам