C # Selenium IE Driver открывает дочернее окно, которое выглядит, как будто оно полностью загружено, но на самом деле является пустой HTML-страницей - PullRequest
0 голосов
/ 09 октября 2019

Я выполняю такие шаги в автоматическом тестовом случае:

  • Вход в приложение
  • Переключение на фрейм с заголовком «Главное меню» (пример)
  • Выберите и щелкните нужный элемент из: «Главное меню> Подменю 1> Подменю 2> Поиск»: при нажатии «Поиск» открывается новое дочернее окно с собственным URL-адресом. Щелчок «Поиск» также изменяет фрейм в фоновом режиме, вызывает перезагрузку страницы, и поэтому «Главное меню» превращается в «Подробное меню».
  • Когда какой-либо идентификатор задан в дочернем окне и кнопка поиска в дочернем окнеЕсли щелкнуть мышью, дочернее окно будет закрыто, а «Детальное меню» будет обновлено информацией для этого конкретного идентификатора.

Проблема:

Когда драйвер IE (версия 3.14.0.0)нажимает кнопку поиска в «Основном меню> Подменю 1> Подменю 2> Поиск», после чего открытое дочернее окно не содержит всей информации. Похоже, что все в порядке, но после просмотра его свойств, URL указывает, что это пустая HTML-страница. Поскольку оно пустое / отключено, я не могу переключиться на него, найти какой-либо элемент или нажать любую кнопку.

Мне удалось выполнить вышеупомянутые шаги теста с ChromeDriver, но тест должен быть выполнен с использованием драйвера IE (требования приложения).

Я также попытался настроить возможности драйвера IE, как указано в: Как я могу запустить InternetExplorerDriver с помощью Selenium WebDriver , но я не могу изменить какие-либо параметры безопасности Internet Explorer, потому что эти параметры отключены.

Я заметил, что когда я использую следующий код после того, как драйвер выполняет «Главное меню> Подменю 1> Подменю 2> Поиск»:

  foreach (var process in Process.GetProcessesByName("IEDriverServer"))
        {
            process.Kill();

        }

Тогда дочернее окно становится полностью работоспособным, но изСессия драйвера курса окончена, поэтому я все равно не могу перейти к более поздним шагам.

Вопрос:

Есть ли способ приостановить процессы драйвера после того, как он выполнит щелчок, подождите, пока дочернее окно не будетполностью загружен, затем возобновить процессы, чтобы он мог переключиться на дочернее окно и т. д.? Если нет, то есть ли способ прикрепить это окно к текущей сессии браузера?

1 Ответ

0 голосов
/ 10 октября 2019

Я предлагаю вам проверить Явное ожидание .

Явное ожидание доступно клиентам Selenium для обязательных процедурных языков. Они позволяют вашему коду остановить выполнение программы или заморозить поток до тех пор, пока условие, которое вы передаете, не разрешится. Условие вызывается с определенной частотой, пока не истечет время ожидания. Это означает, что до тех пор, пока условие возвращает ложное значение, оно будет продолжать пытаться и ждать.

С его помощью вы можете пытаться приостановить выполнение кода, пока какой-либо конкретный элемент управления в этом окне не станет видимым.

Пример C #:

 WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(4));

            // Test the autocomplete response - Explicit Wait
            IWebElement autocomplete = wait.Until(x => x.FindElement(By.ClassName("ac-row-110457")));

Другой пример:

// The timespan determines how long to wait for any 'condition' to return a value
// If it is exceeded an exception is thrown.
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5.0));

// Set the 'condition' as an anonymous function returning a boolean
wait.Until<Boolean>(delegate(IWebDriver d)
{
    // Check if our global variable is initialized by running a little JS
    return (Boolean)((IJavaScriptExecutor)d).ExecuteScript("return typeof(window.TestReady) !== 'undefined' && window.TestReady === true");
});

Ссылки:

(1) Как проверить, является листраница загружена полностью или нет в веб-драйвере?

(2) Явное ожидание

(3) Selenium Webdriver - Ожидание элемента длянагрузка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...