Intereting Posts
ASP.NET – сохранение временных файлов Как сделать длинный клиент опроса в C #? Как получить рандомизированные строки данных из таблицы postgreSQL? C # List .RemoveAll () – Как удалить подмножество списка? Как преобразовать DataTable в динамический объект? Установить TextBlock для сохранения пробела в начале и в конце? Trace vs Debug в .NET BCL Как удалить один «документ» по «ID» с помощью официального драйвера C # для MongoDB? C # Отправка кнопок buttonclicks одному и тому же объекту Глубокая копия с использованием Reflection в методе расширения для Silverlight? Введите экземпляр classа модели экземпляра из пользовательского атрибута AdditionalMetadataAttribute (asp.net mvc 5) C # Невозможно получить словарь для сериализации в XML вызов одной дочерней формы из другой дочерней формы в c # Как получить адрес электронной почты пользователя из Active Directory? Как настроить таргетинг на .net 4.5 с помощью CSharpCodeProvider?

Тайм-аут загрузки страницы – 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; } } 

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