测试加载旋转器硒

时间:2017-03-24 14:12:07

标签: java selenium-webdriver

我正在尝试自动化关于加载微调器的测试用例,该加载微调器在页面加载时在不同页面类别之间导航时显示。

微调器有两种状态: 何时不可见 - “display:none;”

页面加载时的可见状态 - “display:block;”

问题是当我在使用方法

的不同类别之间导航时

选择分类( “相册”);

然后不确定如何断言在加载页面时微调器是可见的。 就像webdriver在它已经消失并且类别已加载时正在寻找微调器。

4 个答案:

答案 0 :(得分:1)

根据查询,在selectCategory(“Gallery”)上;旋转器将在加载图库类别之前显示,右侧。

你可以通过几种方式尝试这种说法,比如说

如果loader有id =“loader”那么

Assert.assertTrue(driver.findElement(By.id("loader")).isDisplayed());

如果你想通过属性断言,那么

Assert.assertEquals(driver.findElement(By.id("loader")).getCssValue("display"), "block or something as per requirement");

link可帮助您获得cssvalue

答案 1 :(得分:1)

如果我正确理解了这个问题,有时会显示微调器,有时则不会,并且在这种情况下你需要等待它消失。我和我正在编写测试的网页有类似的情况,所以我为此写了一些解决方案。

首先,我有一个辅助函数isElementDisplayed,它包装了isDisplayed方法并进行了一些异常处理,所以为方便起见它只返回false:

public static boolean isElementDisplayed(WebElement element) {
    try {
        WebDriverWait wait = new WebDriverWait(driver, 1);
        wait.until(ExpectedConditions.visibilityOf(element));
        return element.isDisplayed();
    } catch (org.openqa.selenium.NoSuchElementException
            | org.openqa.selenium.StaleElementReferenceException
            | org.openqa.selenium.TimeoutException e) {
        return false;
    }
}

我在这里等待的元素只插入了1秒钟,因为我们确信旋转器会在页面上显示,并且没有时间等待更长时间。

其次,我有一个方法,如果在页面上检测到它,则等待微调器消失:

public static void waitForElementToBeGone(WebElement element, int timeout) {
    if (isElementDisplayed(element)) {
        new WebDriverWait(driver, timeout).until(ExpectedConditions.not(ExpectedConditions.visibilityOf(element)));
    }
}

通过调整超时时间,我能够在我的应用程序中涵盖所有冗长的微调器操作。此外,它还允许您加快测试执行速度,因为如果它不存在,您可以避免花时间等待微调器。

答案 2 :(得分:1)

处理硒中的微调器。我们必须使用显式等待-
1- WebdriverWait
2- FluientWait

正如您提到的那样,Spinner具有两个状态: 1- style.display =“ block 2-style.display =” none“
style.display =“ block” :指示Spinner正在运行。
如果Spinner消失,则下面的代码将返回true,否则超时异常

public static boolean waitTillSpinnerDisable(WebDriver driver, By by)
{
  FluentWait<WebDriver> fWait = new FluentWait<WebDriver>(driver);
  fWait.withTimeout(10, TimeUnit.SECONDS);
  fWait.pollingEvery(250, TimeUnit.MILLISECONDS);
  fWait.ignoring(NoSuchElementException.class);

  Function<WebDriver, Boolean> func = new Function<WebDriver, Boolean>() 
   {
     @Override
     public Boolean apply(WebDriver driver) {
    WebElement element = driver.findElement(by);
    System.out.println(element.getCssValue("display"));         
    if(element.getCssValue("display").equalsIgnoreCase("none")){
    return true;
       }
        return false;
     }
   };

   return fWait.until(func);
}

通过:通过微调定位器(例如By.Id,By.css,By.xpath)等。
有关完整的演示,如何处理硒中的Spinner,请访问Handling Spinner in Selenium

答案 3 :(得分:1)

这是我在NodeJS和TypeScript中用于等待所有微调器的功能。它会检查alt文本和src文本属性。

public async WaitForAllSpinners(): Promise<void> {
    const elements = await this.driver.findElements(By.css("img"));
    const keywords = ["loading", "loader", "spinner"];

    for (const element of elements) {
        let altText = "";
        let srcText = "";

        //Element may be stale by the time we check it
        try {
            altText = await element.getAttribute("alt");
        } catch (error) {}

        //Element may be stale by the time we check it
        try {
            srcText = await element.getAttribute("src");
        } catch (error) {}

        let identifiedByAltText = false;
        let identifiedBySrcText = false;

        for (const keyword of keywords) {
            if (altText && altText.toLowerCase().indexOf(keyword) >= 0) {
                identifiedByAltText = true;
                break;
            }
            if (srcText && srcText.toLocaleLowerCase().indexOf(keyword) >= 0) {
                identifiedBySrcText = true;
                break;
            }
        }

        if (identifiedByAltText || identifiedBySrcText) {
            //Element may be stale by the time we wait for it
            try {
                await this.driver.wait(until.elementIsNotVisible(element), this._testConfig.DefaultElementTimeout);
            } catch (error) {}
        }
    }
}