Intereting Posts
Есть ли хорошие обходные пути для предупреждения FxCop CA1006? Получить имя текущего метода из async-функции? Как установить домашнюю страницу браузера по умолчанию (IE) с помощью C #? Как я могу предотвратить asp: RadioButtonList от рендеринга HTML-таблицы? Опубликовать в Facebook пользовательскую стену с помощью Facebook.dll в WP7 Таймер, чтобы бросить метод раз в неделю – C #, Asp.NET Правильный способ асинхронной отправки электронной почты в ASP.NET … (я делаю это правильно?) Выбор варианта выпадающего списка из веб-браузера Изменение размера изображения в C # – Алгоритм определения размеров размера (высота и ширина) Проблема ASP.NET MVC 2 с UpdateModel Есть ли способ обнаружить mouseclick вне пользовательского элемента управления? Генерация кода T4: типы доступа в текущем проекте Приложение застряло в полноэкранном режиме? WPF UserControl с общим кодом FluentValidation: проверьте, пустое ли одно из двух полей

Тайм-аут загрузки страницы – Selenium Webdriver с использованием C #

Я использую Selenium 2.25 WebDriver

У меня возникла проблема с поиском элементов на странице, и иногда мои тестовые примеры могут найти элемент, а когда-то страница не загружается и из-за загрузки страницы, и если я добавлю эту строку ниже, и она выглядит как работа:

driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2)); 

мой вопрос в том, что я не хочу иметь разброс кода с вышеуказанной строкой кода, есть ли способ сделать его централизованным в одном месте?

Любая помощь будет принята с благодарностью, спасибо!

    Если вы установите таймаут один раз, он устанавливается для срока жизни экземпляра драйвера. Вам не нужно его перезагружать. Вы можете установить это сразу после создания драйвера.

     IWebDriver driver = new FirefoxDriver(); driver.Manage().Timeouts.SetPageLoadTimeout(TimeSpan.FromSeconds(2)); 

    Единственное предостережение для использования этого тайм-аута заключается в том, что не каждый браузер может полностью его поддерживать (IE делает это точно, Firefox тоже я думаю, но я не думаю, что Chrome делает это).

    Вы можете попробовать обходной путь следующим образом:

    Наблюдайте за элементом, который загружается последним на вашей странице и находит его идентификатор (или любой другой идентификатор). Затем сделайте что-то вроде этого:

      while (true) { try { IWebElement element = driver.FindElement(By.Id(...)); if (element.Displayed) { break; } } catch (Exception) { continue; } } 

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