Selenium布尔条件不起作用

时间:2017-09-12 06:40:46

标签: selenium selenium-webdriver

我写了一个代码,我发现结果元素是否可见。但不幸的是 ,

我收到了一个例外。

  

org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素:{"方法":" xpath","选择器":&# 34; .//* [@ class =' airbnb-wide-block-search-btn js-airbnb-search-btn']"}

这是我的代码

wd.navigate().refresh();
Thread.sleep(7000);
boolean airbnb = wd.findElement(By.xpath(".//*[@class='airbnb-wide-block-search-btn js-airbnb-search-btn']")).isDisplayed();
assertFalse(airbnb, "Airbnb Add will not show After clicking Add one times");
}

是否有任何建议为什么元素未找到显示..如果找不到元素那么它应该是false我不知道我在哪里错了?

5 个答案:

答案 0 :(得分:3)

为了避免异常和昂贵的try - catch使用,您可以使用findElements找到元素。如果结果列表不为空,您可以检查是否显示现有元素

List<WebElement> elements = wd.findElements(By.xpath(".//*[@class='airbnb-wide-block-search-btn js-airbnb-search-btn']"));
assertFalse(elements.size() > 0 && elements.get(0).isDisplayed(), "Airbnb Add will not show After clicking Add one times");

答案 1 :(得分:1)

使用try- catch阻止或使用throws异常来捕获NoSuchElementException

public void methodName() throws Exception
{
    if(wd.findElement(By.xpath(".//*[@class='airbnb-wide-block-search-btn js-airbnb-search-btn']")).isDisplayed())
{
  System.out.println("Element displayed");
} 
}

try
{
if(wd.findElement(By.xpath(".//*[@class='airbnb-wide-block-search-btn js-airbnb-search-btn']")).isDisplayed())
{
  System.out.println("Element displayed");
} 
}

catch(NoSuchElementException e)
{
  System.out.println("Element is not displayed");
}

答案 2 :(得分:0)

由于您不希望该元素存在,因此以下代码将引发异常:

boolean airbnb = wd.findElement(By.xpath(".//*[@class='airbnb-wide-block-search-btn js-airbnb-search-btn']")).isDisplayed();

并且甚至无法达到您的assert声明。

您实际上可以在代码中放置预期的异常而不是断言为(在Junit中):

@Test(expected = NoSuchElementException.class)
public void youtTest() {
   // do whatever you're doing
   Thread.sleep(7000);
   wd.findElement(By.xpath(".//*[@class='airbnb-wide-block-search-btn js-airbnb-search-btn']"));
}
TestNG中的

语法是somehwat,如:

@Test(expectedExceptions = { NoSuchElementException.class })

答案 3 :(得分:0)

这是Selenium的问题,你需要使用类似下面的try catch块

try
{

        if(wd.findElement(By.xpath(".//*[@class='airbnb-wide-block-search-btn js-airbnb-search-btn']")).isDisplayed())
  {
        //Your code
  }
}
catch (Exception e)
{
        //Your code
}

答案 4 :(得分:0)

让我这样说吧:IsDisplayed将对类型为WebElement的对象起作用。

这里是澄清

  

不应该使用findElement来查找不存在的元素,使用findElements(By)并断言零长度响应。

findElement

上找到