У меня странная проблема, когда я не могу войти на тестируемый сайт с помощью Selenium WebDriver, но у меня не возникает проблем при входе в систему при запуске тестируемого проекта в Visual Studio или в нашей среде QA.
Я разбил тест на самый упрощенный пример, где он позволяет мне вручную вводить имя пользователя, пароль и нажимать кнопку входа в систему, пока он ожидает подтверждения того, что он перешел на следующий экран (ожидает элемент на этой странице).
Все, что происходит при работе в Selenium, - это обновление страницы.
Тест:
driver.Navigate().GoToUrl(this._baseURL + "Account/Index");
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(drv => drv.FindElement(By.Id("element-on-next-page")));
Кнопка входа в систему вызывает метод jQuery $.ajax
для отправки данных в службу и корректно входит в метод success()
. Служба возвращает URL перенаправления.
Это, в свою очередь, попытка перенаправления, которая работает при работе с сайтом вручную, но просто перезагружает страницу входа, когда проходит тест Selenium:
window.location.replace(location.origin + result.RedirectTo);
Я подтвердил, что result.RedirectTo действителен при выполнении теста (это страница, на которую он должен перенаправляться для успешного входа в систему).
Протестировано с Chrome 71.0.3578.98, Firefox 64.0.2 и IE 11.472.17134.0. Он хорошо работает вручную во всех трех.
Я не уверен, почему это поведение действует иначе при автоматизации.
ОБНОВЛЕНИЕ : Страница, на которую он пытается перенаправить, имеет атрибут [Authorize()]
на контроллере. Удаление этого атрибута позволяет пройти тест. Атрибут вызывает только тесты Selenium, а не ручное тестирование.