Я пытаюсь использовать Protractor для нашего приложения. К сожалению, начальная страница входа не является Угловой, поэтому мне приходится обрабатывать все неявные ожидания с помощью ExpectedConditions. В приведенном ниже фрагменте кода функция click() никогда не выполняется. Вместо этого, время тестирования заканчивается, ожидая появления следующей страницы. На выход консоли (также вставленный ниже) я вижу, что ссылка найдена, но я не вижу последующего действия щелчка.Тогда не выполняется после браузера.wait
var signUpLink = element(by.id('sign-up-link'));
var isLinkClickable = EC.elementToBeClickable(signUpLink);
browser.wait(isLinkClickable, 5000).then(function() {
signUpLink.click();
});
var isWidgetVisible = EC.visibilityOf(element(by.id('email')));
browser.wait(isWidgetVisible, 5000, 'Sign Up Page is too slow');
Вот отрывок из консольного вывода:
12:54:17.404 INFO - Executing: [find elements: By.id: sign-up-link])
12:54:18.002 INFO - Done: [find elements: By.id: sign-up-link]
12:54:18.006 INFO - Executing: [is enabled: 0 [[ChromeDriver: chrome on MAC ()] -> id: sign-up-link]])
12:54:18.141 INFO - Done: [is enabled: 0 [[ChromeDriver: chrome on MAC()] -> id: sign-up-link]]
12:54:18.147 INFO - Executing: [find elements: By.id: sign-up-link])
12:54:18.755 INFO - Done: [find elements: By.id: sign-up-link]
12:54:18.760 INFO - Executing: [is displayed: 0 [[ChromeDriver: chrome on MAC()] -> id: sign-up-link]])
12:54:18.770 INFO - Done: [is displayed: 0 [[ChromeDriver: chrome on MAC()] -> id: sign-up-link]]
12:54:18.774 INFO - Executing: [find elements: By.id: sign-up-link])
12:54:18.780 INFO - Done: [find elements: By.id: sign-up-link]
12:54:18.787 INFO - Executing: [is enabled: 0 [[ChromeDriver: chrome on MAC()] -> id: sign-up-link]])
12:54:18.791 INFO - Done: [is enabled: 0 [[ChromeDriver: chrome on MAC()] -> id: sign-up-link]]
12:54:18.805 INFO - Executing: [find elements: By.id: email])
12:54:18.815 INFO - Done: [find elements: By.id: email]
Edit - 5/10 Я получил его на работу, добавив явное ожидание (удушье!). Я не понимаю, почему это работает. Почему так долго требуется, чтобы ссылка была нажата?
var signUpLink = element(by.id('sign-up-link'));
var isLinkClickable = EC.elementToBeClickable(signUpLink);
browser.wait(isLinkClickable, 5000);
browser.driver.sleep(3000); // I give up
signUpLink.click();
Установили ли вы 'browser.ignoreSynchronization = true;'? – alecxe
Да, у меня есть тот, который установлен в beforeEach в спецификации. Я новичок в transractor/webdriverjs, и мне интересно, делаю ли я что-то, что испортит поток управления. – ryasui
Я просто попытался добавить browser.pause() в анонимную функцию прямо перед кликом(), и выполнение теста не приостанавливается. Таким образом, похоже, что then() никогда не выполняется. – ryasui