资产虚假陈述以检查是否显示

时间:2018-11-01 14:53:49

标签: java selenium-webdriver

我正在尝试用硒编写测试。我已经在页面对象包中定义了所有Webelements。

我正在使用S.getColumn()调用Web元素进行测试。

getcolumn()获取Web表中列的Web元素

SaveChangesAsync

我需要检查测试中是否显示了网络元素

我正在使用: By column = By.xpath("//id[@type='column']"); .. .. public WebElement getcolumn(){ return driver.findElement(column) }

但是它抛出错误。我该如何正确写

2 个答案:

答案 0 :(得分:1)

断言不存在元素在硒中实际上并不起作用,通常会遇到一个异常,因为它试图与页面上不存在的元素进行交互。您尚未共享完整的代码或所得到的实际错误,但是我猜想您很可能以NoSuchElementException结尾。如果是这种情况,则需要将断言包装在尝试/捕获该异常。例如

try {
        Assert.assertFalse(S.getColumn().isDisplayed())
    } catch(NoSuchElementException e) {
        LOG.info("Element not displayed as expected")
    }

有了这个,如果元素存在,您会断言失败,因为它期望它是假的。如果该元素不存在,则异常会将您带入陷阱,您可以在其中记录/打印所需的任何消息,然后进行测试

答案 1 :(得分:-1)

您的代码有多个问题。

首先是一个纯Java问题。您的方法getColumn()返回void。这意味着当您呼叫S.getColumn()时,它将始终为null。您的方法可能应该是:

public WebElement getColumn() {
    return driver.findElement(column);
}

第二个是硒问题。当不显示元素-隐藏-可以通过几种不同的方式实现:

一种方法是对元素属性(如不透明度)进行处理,以使其真正不显示。在那种情况下,对.isDisplayed()进行测试通常就足够了。

另一种方法是可以从DOM中删除该元素。在这种情况下,对.isDisplayed()的测试将抛出NoSuchElementException。要在这种情况下进行测试,您可以使用try..catch块,例如:

boolean isDisplayed;
try {
    isDisplayed = S.getColumn().isDisplayed();
} catch(NoSuchElementException ignore) {
    isDisplayed = false;
} finally {
    Assert.assertTrue("element is NOT displayed!",
        isDisplayed)
}

一种更清洁的方法(首选?)是检查其中有多少个元素。您必须将getColumn方法更改为:

public List<WebElement> getColumns() {
    return driver.findElements(column);
    // note the plural "findElements"
}

然后您的测试变为:

Assert.assertTrue("element is NOT displayed!",
    S.getColumns().size() > 0);