查找所有的 xpath 或 cssSelector 位置
Finding xpath or cssSelector locations for all
我对开发还比较陌生,所以如果其中一些看起来相当业余,请原谅我。我发布问题的部分原因是帮助推动我找到答案,部分是为了确保我遵循良好的编码习惯。
挑战 -
我正在使用 Java & Selenium 检查一个非常大的、动态填充的 table。我需要找到一个特定的元素列表,其中文本与区分大小写的字符串匹配 -
List<WebElement> AllPaths = getCurrentDriver().findElements(By.xpath("//*[text()[contains(.,'" + fixedString + "')]]"));
我检查的 table 基本上是一个大型日历样式的网格。如果我没有找到 fixedString 的证据,那么我想一次回溯一个月,直到找到 fixedString。
问题-
上面的代码 returns 如果找不到元素则抛出异常。我的第一个想法是设置一个 while 循环,trying/catching 异常然后重复直到异常停止。然而,这对我来说感觉不对 - 我认为我本质上不应该是 "swallowing" 例外。也就是说,我不确定尝试查找此元素的正确方法是什么,如果找不到它不会导致异常。
我是否认为编写您知道会导致异常的代码然后简单地吞下它并继续前进是一个坏主意是对的吗?
希望这是有道理的,正如我所说的,我是初学者所以请保持温和:)
你可以试试 -
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
不会以这种方式抛出异常。如果没有找到任何元素,它将 return 为空。异常似乎是由于您用于查找元素的语句不正确。
The code above returns an exception if it cannot find an element.
文档说 findElements
returns 没有找到任何元素时的空列表。在这种情况下,它不应该抛出任何异常。有没有可能是你误用了 findElement
而不是 findElements
?抛出什么类型的异常,消息是什么?
您不需要在此处捕获异常。你是对的,尽管应该避免使用异常的控制流并且吞噬异常是不好的。另一方面,框架并不总是让你按照你想要的方式编写代码,所以有时必须做出例外。
我对开发还比较陌生,所以如果其中一些看起来相当业余,请原谅我。我发布问题的部分原因是帮助推动我找到答案,部分是为了确保我遵循良好的编码习惯。
挑战 -
我正在使用 Java & Selenium 检查一个非常大的、动态填充的 table。我需要找到一个特定的元素列表,其中文本与区分大小写的字符串匹配 -
List<WebElement> AllPaths = getCurrentDriver().findElements(By.xpath("//*[text()[contains(.,'" + fixedString + "')]]"));
我检查的 table 基本上是一个大型日历样式的网格。如果我没有找到 fixedString 的证据,那么我想一次回溯一个月,直到找到 fixedString。
问题-
上面的代码 returns 如果找不到元素则抛出异常。我的第一个想法是设置一个 while 循环,trying/catching 异常然后重复直到异常停止。然而,这对我来说感觉不对 - 我认为我本质上不应该是 "swallowing" 例外。也就是说,我不确定尝试查找此元素的正确方法是什么,如果找不到它不会导致异常。
我是否认为编写您知道会导致异常的代码然后简单地吞下它并继续前进是一个坏主意是对的吗?
希望这是有道理的,正如我所说的,我是初学者所以请保持温和:)
你可以试试 -
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
不会以这种方式抛出异常。如果没有找到任何元素,它将 return 为空。异常似乎是由于您用于查找元素的语句不正确。
The code above returns an exception if it cannot find an element.
文档说 findElements
returns 没有找到任何元素时的空列表。在这种情况下,它不应该抛出任何异常。有没有可能是你误用了 findElement
而不是 findElements
?抛出什么类型的异常,消息是什么?
您不需要在此处捕获异常。你是对的,尽管应该避免使用异常的控制流并且吞噬异常是不好的。另一方面,框架并不总是让你按照你想要的方式编写代码,所以有时必须做出例外。