Arhn - архитектура программирования

Неявное ожидание не дожидается указанного времени, что приводит к сбою теста

Я следую руководству и взял оттуда URL-адрес, чтобы попытаться изучить неявное ожидание на нем. Я написал приведенный ниже код, чтобы щелкнуть кнопку на странице, а затем подождать 30 секунд, пока новый элемент не станет видимым, прежде чем взять текст из элемента и подтвердить его с помощью Assert. Код работает нормально, когда я отлаживаю, но запуск теста приводит к ошибке, и тест также завершается всего за 6,8 секунды.

driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/dynamic_loading/1");
driver.FindElement(By.XPath("//*[@id='start']/button")).Click();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
string text = driver.FindElement(By.Id("finish")).Text;
Assert.AreEqual("Hello World!", text);

Ответы:


1

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

В качестве примера, чтобы получить текст из элемента, вы должны вызвать WebDriverWait для ElementIsVisible(), и вы можете использовать любой из следующих Стратегии поиска:

  • Id:

    string text = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.Id("finish"))).Text;
    Assert.AreEqual("Hello World!", text);
    
  • CssSelector:

    string text = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("div#finish"))).Text;
    Assert.AreEqual("Hello World!", text);
    
  • XPath:

    string text = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[@id='div#finish']"))).Text;
    Assert.AreEqual("Hello World!", text);
    
28.12.2020
  • Большое спасибо. это сработало 28.12.2020
  • @WaseemAbbas Только что обновил ответ в соответствии с вашей существующей программой. 28.12.2020
  • Я нашел код для явного ожидания из учебника, за которым следил. Но код не работает. Технически это то же самое, что вы написали, но написано иначе. Я не понимаю, почему написанный вами код работает, а другой - нет: WebDriverWait wait = new WebDriverWait (driver, TimeSpan.FromSeconds (10)); IWebElement ele = wait.Until ((result) = ›{return result.FindElement (By.Id (finish));}); 28.12.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..