Java 要检查是否显示的资产虚假报表
我正在尝试用selenium编写一个测试。我已经在页面对象包中定义了我的所有webelements 我使用S.getColumn()调用测试的webelement getcolumn()获取web表中列的webelementJava 要检查是否显示的资产虚假报表,java,selenium-webdriver,Java,Selenium Webdriver,我正在尝试用selenium编写一个测试。我已经在页面对象包中定义了我的所有webelements 我使用S.getColumn()调用测试的webelement getcolumn()获取web表中列的webelement By column = By.xpath("//id[@type='column']"); .. .. public WebElement getcolumn(){ return driver.findElement(column) } 我需要检查
By column = By.xpath("//id[@type='column']");
..
..
public WebElement getcolumn(){
return driver.findElement(column)
}
我需要检查webelement是否显示在我的测试中
我正在使用:Assert.assertFalse(S.getColumn().isDisplayed())代码>
但这是一个错误。如何正确编写它断言元素不存在在selenium中并不真正起作用,通常会出现异常,因为它试图与页面上不存在的元素交互。您还没有共享完整的代码或您得到的实际错误,但我猜您很可能最终会遇到一个NoTouchElementException
,如果是这种情况,您需要将断言包装在一个try/catch中以查找该异常。e、 g
try {
Assert.assertFalse(S.getColumn().isDisplayed())
} catch(NoSuchElementException e) {
LOG.info("Element not displayed as expected")
}
这样,如果元素存在,就会出现断言失败,因为它希望它为false。如果元素不存在,异常将使您陷入困境,您可以只记录/打印您想要的任何消息,并且测试可以继续进行。您的代码有多个问题
首先是一个纯粹的Java问题。您的方法getColumn()
返回void
。这意味着当您调用S.getColumn()
时,它将始终为null
。您的方法可能是:
public WebElement getColumn() {
return driver.findElement(column);
}
其次是硒问题。当一个元素未显示-隐藏-这可以通过几种不同的方式实现:
一种方法是对元素属性(如不透明度)进行操纵,使其真正不显示。在这种情况下,测试.isDisplayed()
通常就足够了
另一种方法是可以从DOM中删除元素。在这种情况下,测试.isDisplayed()
将抛出NoTouchElementException
。要在这种情况下进行测试,可以使用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"
}
什么是错误?我们无法更正您尚未共享的代码。请编辑您的问题并添加相关代码,例如S.getColumn()
以及其他方法。您还需要添加错误。你真的需要花时间简化你的代码,调查缩小问题范围,然后用你发现的更新你的问题。另外,花一分钟的时间正确格式化你的问题,特别是代码。如果您不知道如何执行此操作,请参阅格式帮助。您可以轻松地使用类似于driver.findElements(…).size()==0
的方法来验证元素是否不存在。
Assert.assertTrue("element is NOT displayed!",
S.getColumns().size() > 0);