Java 查找所有对象的xpath或cssSelector位置

Java 查找所有对象的xpath或cssSelector位置,java,selenium,exception,while-loop,exception-handling,Java,Selenium,Exception,While Loop,Exception Handling,我对开发相对较新,所以如果其中一些内容看起来相当业余,请原谅我。我发布这个问题的部分原因是为了帮助我找到答案,部分原因是为了确保我遵循了良好的编码实践 挑战- 我使用Java和Selenium来检查一个非常大的、动态填充的表。我需要找到一个特定的元素列表,其中文本匹配区分大小写的字符串- List<WebElement> AllPaths = getCurrentDriver().findElements(By.xpath("//*[text()[contains(.,'" + fi

我对开发相对较新,所以如果其中一些内容看起来相当业余,请原谅我。我发布这个问题的部分原因是为了帮助我找到答案,部分原因是为了确保我遵循了良好的编码实践

挑战-

我使用Java和Selenium来检查一个非常大的、动态填充的表。我需要找到一个特定的元素列表,其中文本匹配区分大小写的字符串-

List<WebElement> AllPaths = getCurrentDriver().findElements(By.xpath("//*[text()[contains(.,'" + fixedString + "')]]"));
List allpath=getCurrentDriver().findElements(By.xpath(“//*[text()[contains(,”“+fixedString+”)]]);
我正在检查的表基本上是一个大型日历样式的网格。如果我没有找到fixedString的证据,那么我想一次迭代一个月,直到找到fixedString为止

问题-

如果上面的代码找不到元素,则返回异常。我的第一个想法是设置一个while循环,尝试/捕获异常,然后重复,直到异常停止。然而,我觉得这是不对的——我不认为我本质上应该“吞咽”例外。也就是说,我不确定找到这个元素的正确方法是什么,如果它找不到它,就不会导致异常

我是否认为编写导致异常的代码,然后简单地将其吞下并继续前进是个坏主意


希望这是有意义的,就像我说的,我是一个初学者,所以请温柔一点:)

你可以试试类似的东西-

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 + "')]"));
List allpath=getCurrentDriver().findElements(By.xpath(“/*[contains(text(),“+fixedString+”)]”);
findElements
不会以这种方式引发异常。如果找不到元素,它将返回空。异常似乎是由于用于查找元素的语句不正确造成的

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

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


您不需要在这里捕获异常。您是对的,但是应该避免使用异常的控制流,并且吞咽异常是不好的。另一方面,框架并不总是允许您按照自己想要的方式编写代码,因此有时必须创建异常。

您应该在问题中添加异常详细信息。我假设fixedString中没有任何引号。根据@david_c,问题中的代码行抛出异常,而不是结果的后续处理。所以这张if支票没什么用。谢谢gagan singh。我确实更新了答案。希望有帮助。是的,这似乎是失败的原因。david可以确认他收到了什么异常。这起作用了。唯一的例外是NoTouchElement,尽管我现在已经重构了代码,使其看起来更像上面的代码,并且看不到我的原始代码,但我同意我很可能使用的是FindElement而不是FindElement。