Как да се справите със страница, която никога не се зарежда напълно поради Google Анализ, използващ Selenium C#

Имам случай, при който страницата, към която навигирам, никога не се зарежда напълно в тестовите среди, въпреки че всички GUI елементи са видими, това е в резултат на скрипт keepalive.php, който поддържа връзката отворена към Google Анализ и други аналитични скриптове в рамките кодът в очакване на изпращане и получаване на информация. Тъй като не събираме статистически данни в мрежата, скриптът никога не завършва и страницата никога не се зарежда напълно.

Когато навигирате ръчно до страницата, натискането на Escape спира изпълнението на скрипта и зарежда страницата, затова се опитах да използвам Selenium Actions:

Actions action = new Actions(driver);
action.SendKeys(Keys.Escape);

Вярвам обаче, че този код никога не се достига, тъй като Selenium изчаква страницата да се зареди напълно, преди да изпълни по-нататъшни редове код.

За съжаление премахването или промяната на keepalive.php и кода на google analytics в нашите тестови среди не е жизнеспособна опция, по-скоро нашият пакет за автоматизация трябва да заобиколи това.


person MatthewThomasGB    schedule 17.02.2016    source източник


Отговори (2)


Можете да зададете PageLoadTimout. С това Selenium ще изведе грешка, когато не може да зареди сайта в определеното време, което можете да хванете и да продължите. Не много елегантно, за съжаление.

driver.Manage().Timeouts().SetPageLoadTimeout(timespan)

Взето от Selenium WebDriver - Как да настроя зареждане на страница Изчакване при използване на C#

Според Време за изчакване на зареждането на страницата - Selenium Webdriver с помощта на C# е Възможно е не всеки браузър да поддържа изчакване.

person Sosian    schedule 17.02.2016

Задайте имплицитно изчакване на нула.

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(0));

и изчакайте елементи чрез изрично изчакване

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
    {
        return d.FindElement(By.Id("someDynamicElement"));
    });
person Leon Barkan    schedule 21.02.2016