Angularjs Protractor Element by.model не может найти элемент?
-
21-12-2019 - |
Вопрос
Использование синтаксиса элемента (by.model ()), чтобы найти поле и текст ввода.
элемент (by.model ('sample_ad.id')). SendKeys («Batman»);
Получает исключение из Chromedriver:
Stacktrace:
Error: Timed out waiting for Protractor to synchronize with the page after 11 seconds
at Error (<anonymous>)
==== async task ====
WebDriver.executeScript()
at Protractor.waitForAngular (/Users/jon/dev/project_name/node_modules/protractor/lib/protractor.js:278:22)
at Protractor.findElement (/Users/jon/dev/project_name/node_modules/protractor/lib/protractor.js:427:8)
at Object.elementFinder.(anonymous function) [as sendKeys] (/Users/jon/dev/project_name/node_modules/protractor/lib/protractor.js:62:21)
at null.<anonymous> (/Users/jon/dev/project_name/test/e2e/features/somedirectiveSpec.js:24:39)
at /Users/jon/dev/project_name/node_modules/protractor/jasminewd/index.js:54:12
==== async task ====
at null.<anonymous> (/Users/jon/dev/project_name/node_modules/protractor/jasminewd/index.js:53:12)
at null.<anonymous> (/Users/jon/dev/project_name/node_modules/protractor/node_modules/minijasminenode/lib/async-callback.js:45:37)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
.
Не уверен, почему это ломается, но транспортир кажется очень хрупким прямо сейчас ... У меня нет проблем, используя объект браузера, чтобы найти элементы, текст ввода и т. Д. ...
Любая помощь будет оценена
Редактирование: Если я изменим строку к следующему, я могу взаимодействовать с текстовым полем. Browser.driver.findelement (Protractor.by.id ('thumb_ad_id')). SendKeys («Batman»);
Решение
Для получения дополнительной информации о тайм-аутах.
Другие советы
Надеюсь, это поможет другим ....
нашел это на Github (см. ссылки на ссылку).Этот вопрос, который я считаю, это сценарий, не возвращающийся, поэтому SendKeys не работал.Перед взаимодействием с DOM с помощью объектов транкторов (элемент, PTOR и т. Д.) Установите эту переменную:
Причина, по которой следующие работы - это потому, что она не полагается на async-вызовы, он просто напрямую взаимодействует с DOM и вставляет ключи в поле ввода. browser.driver.findelement (protractor.by.id ('sample_ad_id')). SendKeys («Batman»);
Причина, по которой мой звонок не работал ( Я верю ) - потому что был асинхронный звонок, который не возвращался вовремя. элемент (by.model ('samble_ad.id')). SendKeys («Batman»);
Похоже, ваш тест временно выходит.Тайм-аут по умолчанию для транспортировки составляет 11 секунд.
Попробуйте установить другой тайм-аут для этого теста:
it('should override timeout', function() {
// Timeout of 30 seconds.
element(by.model('sample_ad.id')).sendKeys('batman');
}, 30000)
.
Вы также можете переопределить тайм-аут для всех ваших тестов в файле конфигурации транспортировки.См. Этот файл конфигурации образец:
https://github.com/andresdominguez/Protractor-Meetup / Blob / Master / Protractor-config.js # L19
// Inside the protractor config file.
onPrepare: function() {
// Override the timeout for webdriver.
var ptor = protractor.getInstance();
ptor.driver.manage().timeouts().setScriptTimeout(60000);
}
.