Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Сlick метод бросает WebDriverException если страница открывается больше 60 секунд хотя PageLoad таймаут установлен в 2 минуты

csharp
Теги: #<Tag:0x00007f7b705c65a0>

(Влад) #1

Исходя из доки Click() метод ждет пока страница будет загружена
https://seleniumhq.github.io/selenium/docs/api/dotnet/html/M_OpenQA_Selenium_IWebElement_Click.htm

driver.Manage().Timeouts().PageLoad установлен в 2 минуты
но
element.Click() кликает и не ждет пока откроется новая страница а бросает WebDriverException:
The HTTP request to the remote WebDriver server for URL http://localhost:17553/session/1a94ba744cb6dc03af7d65bf58003eff/element/0.42183143444524296-3/click timed out after 60 second

webdriver: .net binding 3.13.1
Chrome: 69.0.3497.100
Chromedriver: 2.42.0.1

Возможно ли как-то еще указать timeout для загрузки страницы или дело может еще в чем-то?

похожий вопрос тут: :https://stackoverflow.com/questions/51765048/selenium-click-method-is-executing-and-then-timing-out/52539113#52539113


(Влад) #2

Помогло указание таймаута в конструкторе ChromeDriver-а:

если же я не указываю таймаут при инициализации ChromeDriver-а,
то используются дефолтные 60 секунд

остался открытым вопрос как же работает PageLoad таймаут,
предположение, что PageLoad таймаут работает в ситуациях когда я
driver.Navigate().GoToUrl(“myUrl”)
image

если же клик на кнопке приводит к редиректу на новый Url - тогда в этом случае PageLoad таймаут предположительно не помощник


(Евгений) #3

алгоритм всегда такой: сначала ожидаем наличие элемента на странице, который в том числе должен быть visible и enabled, а далее кликаем, проверяем текст и др.


(Ли неизвестная) #4

Скорее всего вы неправильно написали локатор для элемента, на который пытаетесь кликнуть.
Если вы уверены в своем локаторе, можете поставить жесткое ожидание Thread.Sleep(5000);, что в дальнейшем будет тормозить код. Можете попробоваит вставить ожидание появления элемента таким оброазом :

        var wait = new WebDriverWait(scenarioContext.driver, timeoutInSeconds);
        //Ожидание появление элемента на странице по Xpath

           
            wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.XPath(elementXpath)));

            wait.Until(ExpectedConditions.ElementIsVisible(By.XPath(elementXpath)));

            Console.WriteLine("Загрузился элемент по XPath:"+ elementXpath);