我写了一个代码,我发现结果元素是否可见。但不幸的是 ,
我收到了一个例外。
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
我不知道我在哪里错了?
答案 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)并断言零长度响应。