Драйвер Selenium - FireFox/Marionette не ждет. Пока

С момента обновления до драйвера Marionette. Firefox больше не ждет. В основном я хочу, чтобы он вошел в систему, подождите, пока страница загрузится, а затем проверьте, вошел ли он в систему, найдя «выход из системы» на странице. Вот моя установка

// navigate to url "http://..."
// Find Log In button and .Click()

WebDriverWait wait = new WebDriverWait(driver, System.TimeSpan.FromSeconds(30));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

// Assert if the page contains "Log out"

Что происходит, так это то, что после того, как он нажимает «Войти», он не ждет загрузки страницы, поэтому он выдает ошибку, потому что не может найти «Выход».

Я подчеркиваю, что код работал для более старого драйвера Firefox (не Marionette), а также для драйвера Chrome. Кто-нибудь еще сталкивается с проблемой, когда новый драйвер Firefox не выполняет ожидание?

Извините, я должен был быть более ясным, драйвер Firefox не выполняет НИКАКИХ ожиданий, поэтому ожидание существующего элемента также не будет работать.


person Jonny Ngan    schedule 09.08.2016    source источник
comment
Так почему же вы не ждете кнопки выхода из системы, а ждете readyState??   -  person Saurabh Gaur    schedule 09.08.2016
comment
Пожалуйста, предоставьте больше кода, который вы используете, HTML кнопок входа и выхода и ошибку, которую вы получаете.   -  person JeffC    schedule 09.08.2016
comment
Я мог бы предоставить больше кода, но не сейчас. Как я уже сказал, старый драйвер Firefox и драйвер Chrome работают и ждут, поэтому, если предположить, что марионетка работает так же, мой код должен быть правильным, если он работал для других драйверов.   -  person Jonny Ngan    schedule 11.08.2016
comment
@JeffC - ошибка в том, что он не находит выход из системы, поэтому Assert терпит неудачу, НО единственная причина, по которой он не работает, заключается в том, что он не ждет перезагрузки страницы после нажатия входа в систему, он пытается немедленно найти выход из системы, пока он все еще на странице входа   -  person Jonny Ngan    schedule 11.08.2016
comment
Прочитайте это? Может быть такая же странная проблема. /вопросы/27114626/   -  person Pseudo Sudo    schedule 17.08.2016


Ответы (1)


Причина, по которой ваш тест не работает, — это то, что Джонни указал в комментариях. Вы ждете, пока страница будет готова сразу после входа в систему, которая уже «готова», поскольку вы только что взаимодействовали с ней. Что вы хотите сделать, так это выполнить неявное ожидание элемента выхода из системы. Это можно сделать несколькими разными способами.

wait.Until(ExpectedConditions.ElementExists(By.XPath(xpath)));

wait.Until(ExpectedConditions.ElementExists(By.CssSelector(csspath)));

Любой из них будет выполнять неявное ожидание на странице, ожидая до 30 секунд (как определено в вашем элементе ожидания), чтобы найти элемент выхода из системы.

person Pseudo Sudo    schedule 16.08.2016
comment
Проблема в том, что он вообще не ждет, поэтому ожидание элемента тоже не будет работать, я думаю, это может быть ошибка в драйвере марионетки. - person Jonny Ngan; 31.08.2016