![](/img/trans.png)
[英]Best way to check that element is not present using Selenium WebDriver with java
[英]Which is the correct way to check if an element is present or displayed on a page with Selenium WebDriver using Java?
我正在使用Selenium WebDriver测试Web应用程序,我想知道哪个是检查元素是否存在或显示的正确方法。 我通常断言所有元素都存在于页面上,但它也会检查隐藏的元素,在这种情况下也需要检查元素是否仅在某些操作完成时才显示。 例如,我单击一个链接,显示其他字段和标签,而之前它们是隐藏的。 在这种情况下,我应该检查元素是否存在,以及它们是否在单击其他元素之前和之后显示。
我想知道哪种方法可以做到这一点。 检查页面上的所有元素是否太多(假设我在页面中有一些按钮,文本字段,标签,链接等)?
出于讨论的目的,我想包括一些代码片段。 要检查页面上是否存在元素,请使用以下代码段:
public boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
要检查是否显示了元素,请使用以下代码段:
public boolean isElementDisplay(By by) {
if (driver.findElement(by).isDisplayed()) {
return true;
} else
return false;
}
测试此应用程序的一个目的是检查元素是否存在并正确显示。 我在这做对了吗? 请告诉我你的观点。 我最近开始与Selenium WebDriver合作,并且是我公司中唯一一个这样做的人...我没有任何人可以求助。 任何答案都表示赞赏。
它没有问题,除非你在一个首先不存在的元素上调用你的“checkIfDisplayed”方法,它将抛出异常。 我会修改它:
public boolean checkIfDisplayed(By by) {
if (isElementPresent(by) {
if (driver.findElement(by).isDisplayed()) {
return true;
} else
return false;
} else
return false;
}
(这可能不是编译的代码,我是C#man,但你应该明白我的意思)
它可能会有轻微的性能损失,但总的来说你正在做的事情完全没问题。
为了检查元素的存在,我宁愿使用
public boolean isElementPresent(By by)
{
return driver.findElements(by).size() > 0
}
我真的不明白你的checkIfDisplayed函数背后的想法。 它返回WebElemet的isDisplayed()方法返回的结果,而不添加任何新功能......
编辑
到目前为止,雅兰提供了最好的答案。 只是稍微修改一下:
public boolean checkIfDisplayed(By by)
{
List<WebElemet> elements = driver.findElements(by);
return ((elements.size() > 0) && (elements[0].isDisplayed()));
}
但我相信最好是分别调用isElementPresent和isDisplayed。 通过这种方式,您将知道测试失败的原因(如果它是由元素的存在或可见性引起的)
我使用相同的方法(我的意思是相同的方法)。 但了解两件事情很重要。 某些元素可以存在但不可见。 因此,为了验证元素是否存在,我们可以调用该方法
public boolean isElementPresent(By locatorKey) {
try {
driver.findElement(locatorKey);
return true;
} catch (NoSuchElementException e) {
return false;
}
但是isElementPresent方法的缺点是它可以指出DOM模型中的元素在页面上不可见,因此无法通过webDriver访问。 那么在这种情况下,额外的检查有助于我
driver.findElement(By.xpath(....)).isDisplayed()
希望事情现在明白了)
我会说你的第一种方法看起来很好。
如果findElement-call没有给你结果,第二个将给你带来麻烦。
您应该添加一个检查是否找到了一个元素,然后检查它是否显示:
try {
final WebElement elem = driver.findElement(by);
elem.isDisplayed();
return true;
} catch (NoSuchElementException nse) {
return false;
}
另请注意:您忽略了多个元素与by实例给出的条件匹配的可能性。 请参阅findElemts()方法 。
您也可以根据您的要求将这两种方法结合起来 ,如下所示,
if(driver.findElements(By.LOCATOR).size()>0)
{
if(driver.findElement(By.LOCATOR).isDisplayed())
{ print "Element is present and displayed"; }
else
{ print "Element is present but not displayed"; }
}
else
{ print "Element is not present"; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.