Как создать метод загрузочного счетчика, включающий отображение: Блокировка отображения: нет с использованием Selenium C #? - PullRequest
0 голосов
/ 25 сентября 2019

Не могу поймать загрузчик в моем тесте.Мне нужно создать метод, который поможет мне увидеть, когда загрузчик больше не виден.Я не могу выбрать ни один из элементов страницы из-за этой проблемы.

Код попытки:

public static void SeeNoLoaderInQD() 
{ 
    Actor.Wait.UntilElementIsNotDisplayed(Elements.QDLoader); 
    Assert.IsTrue(Elements.SeeException.Count == 0); 
} 

SnapShort

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Я бы попробовал что-то вроде этого:

public static void WaitForElementAttributeValue(this IWebDriver driver, By by, string attribute, string value)
{
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
    wait.Until(d => d.FindElement(by).GetAttribute(attribute).Contains(value));
}

Вы можете вызвать этот метод для своего сценария следующим образом:

driver.WaitForElementAttributeValue(By.Id("line-scale-loader"), "style", "display: none;");

При вызове этого метода вы говорите WebDriver ждатьпока значение атрибута style в WebElement не станет равным display: none;, что означает, что загрузчик больше не виден.

0 голосов
/ 26 сентября 2019

Чтобы проверить, загружена ли страница, я обычно проверяю 3 критерия, а именно: -

  • Готова ли страница?
  • Завершены ли вызовы ajax?
  • Спиннер / загрузчик невидим?

Пример кода,

    public static void WaitForPageToLoad(IWebDriver driver)
    {           
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
        wait.Until(driver =>
        {               
            bool isPageReady = (bool)((IJavaScriptExecutor)driver).
                ExecuteScript("return document.readyState == 'complete'");               
            bool isAjaxFinished = (bool)((IJavaScriptExecutor)driver).
            ExecuteScript("return jQuery.active == 0");
            bool isLoaderInvisible = (bool)((IJavaScriptExecutor)driver).
                ExecuteScript("return $('#line-scale-loader').is(':visible') == false");
            return isPageReady && isAjaxFinished && isLoaderInvisible;
        });          
    }

Надеюсь, это поможет.

0 голосов
/ 25 сентября 2019

В Selenium встроено ExpectedConditions, которое вы можете использовать с WebDriverWait для обработки подобных ситуаций.Может случиться так, что ваше ожидание невидимого срабатывает и проходит до того, как загрузчик становится видимым, что может привести к сбою последующих действий, поскольку загрузчик появляется позже.Вы можете добавить ожидание видимого, а затем ожидание невидимого.

By qdLoaderLocator = By.Id("line-scale-loader");
WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementIsVisible(qdLoaderLocator));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(qdLoaderLocator));

Примечание: не используйте такие утверждения, как

Assert.IsTrue(Elements.SeeException.Count == 0);

, потому что, когда они терпят неудачу, вы получите

Expected: true
Actual: false

, который ничего вам не говорит.Вместо этого используйте один из следующих вариантов:

Assert.Zero(Elements.SeeException.Count, "Verify no exceptions");
Assert.AreEqual(0, Elements.SeeException.Count, "Verify no exceptions");

Теперь вы получите

Verify no exceptions
Expected: 0
Actual: 2

В этом случае это может показаться не очень полезным, но вы по крайней мере получите больше информации, чем просто true /ложный.Когда вы начнете сравнивать строки, числа и т. Д., Это будет ОЧЕНЬ более полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...