我正在尝试自动化关于加载微调器的测试用例,该加载微调器在页面加载时在不同页面类别之间导航时显示。
微调器有两种状态: 何时不可见 - “display:none;”
页面加载时的可见状态 - “display:block;”
问题是当我在使用方法
的不同类别之间导航时选择分类( “相册”);
然后不确定如何断言在加载页面时微调器是可见的。 就像webdriver在它已经消失并且类别已加载时正在寻找微调器。
答案 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) {}
}
}
}