Java 如果您不';我不知道某些元素是否存在?

Java 如果您不';我不知道某些元素是否存在?,java,selenium,Java,Selenium,我正在为公共互联网上的一个站点编写一个网络蜘蛛——也就是说,我无法控制目标站点。出于某种原因,我感兴趣的某些元素在重新加载之间更改了它们的名称、id和类似内容 由于Selenium,AFAIK,没有一个在元素存在或不存在时返回true/false的方法(而是抛出异常),处理这种情况的好策略是什么? 伪码 如果存在元素A,请单击A 否则,如果元素B存在,请单击B 否则,如果元素C存在,请单击C 目前,我必须用try/catch来包围每个if Selenium是否内置了用于此目的的工具,或者我应该编

我正在为公共互联网上的一个站点编写一个网络蜘蛛——也就是说,我无法控制目标站点。出于某种原因,我感兴趣的某些元素在重新加载之间更改了它们的名称、id和类似内容

由于Selenium,AFAIK,没有一个在元素存在或不存在时返回true/false的方法(而是抛出异常),处理这种情况的好策略是什么?

伪码

如果存在元素A,请单击A 否则,如果元素B存在,请单击B 否则,如果元素C存在,请单击C

目前,我必须用try/catch来包围每个if

Selenium是否内置了用于此目的的工具,或者我应该编写自己的helper方法?

public Boolean elementExists(WebDriver-driver,String-xpath){
public Boolean elementExists(WebDriver driver, String xpath) {
   // this will not throw any exception, if no element is found, the list will be empty
   List<WebElement> elements = driver.findElements(By.xpath(xpath));
   if (elements.size() > 0) {
      return true;
   }
   else {
      return false;
   }
}
//这不会引发任何异常,如果找不到元素,列表将为空 List elements=driver.findElements(By.xpath(xpath)); if(elements.size()>0){ 返回true; } 否则{ 返回false; } }
任何定位器都可以用xpath解释

对于id
“foo”
,xpath将是
“/*[@id='foo']”

对于name
“foo”
来说,xpath将是
“//*[@name='foo']”

etc

公共布尔元素存在(WebDriver驱动程序,字符串xpath){
//这不会引发任何异常,如果找不到元素,列表将为空
List elements=driver.findElements(By.xpath(xpath));
if(elements.size()>0){
返回true;
}
否则{
返回false;
}
}
任何定位器都可以用xpath解释

对于id
“foo”
,xpath将是
“/*[@id='foo']”

对于name
“foo”
来说,xpath将是
“//*[@name='foo']”


etc

聪明!非常感谢。我有一种强烈的感觉,那就是肯定有一种比几十次尝试/抓住更好的方法。如果可能,请始终避免尝试/捕获块。聪明!非常感谢。我有一种强烈的感觉,那就是肯定有一种比几十次尝试/抓住更好的方法。如果可能,请始终避免使用try/catch块。