2016-01-15 3 views
1

У меня есть приложение, которое включает кнопку, которую вы нажимаете, которая прокручивает страницу с помощью JS.Ждите программных прокрутки селен/транспортир

Я получаю сообщение об ошибке «Элемент не кликается в точке (somepoint, somepoint)», я думаю, это связано с тем, что селен/транспортир не знает о динамическом прокрутке и поэтому не ждет его, как я могу установить определенное время ожидания перед попыткой следующего действия?

ответ

0

Вы можете использовать protractor expected conditions как

var EC = protractor.ExpectedConditions; 

buttonThatScrolls.click(); 
var nextElement = $('#xyz')); 
browser.wait(EC.presenceOf(nextElement), 10000); 
nextElement.click(); 
+0

Я в конечном итоге только с помощью browser.wait(), однако ваше решение может быть лучше, это EC.presenceOf эквивалентно 'browser.wait (функция() { возврата (elmLocator) .isPresent(); }, 3000); '? потому что я пробовал это, и он не работал – Melbourne2991

+0

@ Melbourne2991 Как и все методы WebdriverJS 'isPresent()' возвращает обещание, и ожидание ожидает, что функция вернет true/false. Таким образом, ваш метод должен выглядеть как 'browser.wait (function() {return (elmLocator) .isPresent(). Then (return function (isPresent) {return isPresent;});}, 3000);' – nilesh

+0

Также 'EC.presenceOf 'использует' isPresent'. Проверьте код транспортира [здесь] (https://github.com/angular/protractor/blob/master/lib/expectedConditions.js#L288-L290) – nilesh

0

Вам также может понадобиться для перехода к элементу перед нажатием кнопки:

browser.actions.mouseMove(elm).perform(); 

Или scroll into it's view:

browser.executeScript("arguments[0].scrollIntoView();", elm); 

Обратите внимание, что есть Hacky обходной путь - щелкните элемент с помощью яваскрипта:

browser.executeScript("arguments[0].click();", elm); 

, который может работать как есть, но убедитесь, что вы знаете разницу:


И, чтобы добавить к ответу @ nilesh, elementToBeClickable expected condition звучит li ка лучше подходит в данном конкретном случае:

browser.wait(EC.elementToBeClickable(elm), 5000); 
Смежные вопросы