找到所有的xpath或cssSelector位置

时间:2018-07-03 11:11:41

标签: java selenium exception while-loop exception-handling

我对开发来说还比较陌生,所以如果其中有些看起来比较业余,请原谅我。我发布问题的部分原因是为了帮助我轻描淡写地回答问题,部分原因是要确保我遵循良好的编码习惯。

挑战-

我正在使用Java和Selenium检查一个很大的,动态填充的表。我需要找到一个特定的元素列表,其中文本与大小写敏感的字符串匹配-

List<WebElement> AllPaths = getCurrentDriver().findElements(By.xpath("//*[text()[contains(.,'" + fixedString + "')]]"));

我要检查的表基本上是一个大的日历样式网格。如果找不到fixedString的证据,那么我想一次迭代一个月直到找到确实fixedString。

问题-

上面的代码如果找不到元素,则返回异常。我的第一个想法是设置一个while循环,尝试/捕获异常,然后重复执行直到异常停止为止。但是,这对我来说是错的-我不认为我应该在本质上“吞咽”异常。就是说,我不确定尝试找到此元素的正确方法是,如果找不到该元素,不会导致异常。

我是否正确地认为编写您知道会导致异常的代码然后简单地吞下它并继续前进是一个坏主意?

希望这很有道理,正如我所说的,我是个初学者,所以请保持柔和:)

2 个答案:

答案 0 :(得分:1)

您可以尝试类似-

if(AllPaths.size()>0){
  //logic when elements found with fixed string
}else{
//logic to iterate over another month
}

此外,您的陈述对我来说似乎是错误的。应该是-

List<WebElement> AllPaths = getCurrentDriver().findElements(By.xpath("//*[contains(text(),'" + fixedString + "')]"));

findElements不会以这种方式引发异常。如果未找到任何元素,它将返回空。该异常似乎是由于您用于查找元素的语句不正确所致。

答案 1 :(得分:1)

  

上面的代码如果找不到元素,则会返回异常。

文档说findElements找不到元素时返回一个空列表。在这种情况下,它不应引发任何异常。您是否可能错误地使用了findElement而不是findElements?引发什么类型的异常,消息是什么?

您不需要在这里捕获异常。您说对了,尽管应该避免使用异常的控制流并且吞咽异常是不好的。另一方面,框架并不总是让您按照自己的方式编写代码,因此有时必须进行例外处理。