没有捕获NoSuchElementException

时间:2019-08-02 08:47:33

标签: java selenium web-scraping

我正在刮擦一个网站的装置,然后使用另一个网站检查每个团队的表格。我遇到的问题是,并非所有团队都存在于表单网站上,对于NoSuchElementException清除不存在于URL找不到页面上的团队,我得到了xPath。我正在尝试捕获异常,但程序仍会中断。

我添加了一个try catch,但是它不能解决我的问题,该程序作为一个没有成立的团队到达时就会中断。

 for(int i = 0; i < fixtures.getAwayTeams().size(); i++)
 {
     driver.navigate().to(FORMURL.concat( (fixtures.getAwayTeams().get(i)).replace( ' ', '+' )));          
     for (int j = 1; j < 11; j++) {
        String xPath = FORMXPATHONE.concat( String.valueOf( j ) ).concat(FORMXPATHTWO);
        try {
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xPath)));
            forms = driver.findElementsByXPath( xPath );
            } catch(NoSuchElementException | StaleElementReferenceException e) {
            awayTeamForm.add("No Form for Team");
            }
        for (WebElement languageElement : forms) {
            ArrayList <String> wld = new ArrayList<String>();
            wld.add( languageElement.getText() );
            String listedForm = String.join(",", wld );
            awayTeamForm.add(listedForm);
        }
    }
    }
 }  
  

原因:org.openqa.selenium.NoSuchElementException:无法找到元素:// * [@ id =“ results”] / table / tbody / tr [1] / td [6]

4 个答案:

答案 0 :(得分:0)

您的try-catch语句看起来不错。这意味着问题必须在其他地方。

您正在使用硒,这意味着有两个名为NoSuchElementException的异常可用。检查您的进口。您最有可能遇到的问题是,您确实导入了java.util.NoSuchElementException而不是org.openqa.selenium.NoSuchElementException

答案 1 :(得分:0)

您可以通过首先获取元素列表然后检查该列表的大小来检查元素是否在页面上,如果元素列表大于0,则表明该元素存在,否则该元素不在页面上。这样,您也不必捕获异常。

您可以这样做:

List<WebElement> elementList = driver.findElements(By.xpath("xPath"));
if(elementList.size()>0){
    // Element is present
}
else{
    // Element is not present
}

答案 2 :(得分:0)

尝试捕获整个循环体并进行调试,以查看是否在正确的行上捕获了正确的异常。 您确定只有

forms = driver.findElementsByXPath( xPath );

可以引发异常吗?

答案 3 :(得分:0)

尝试:

try {
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xPath)));
        forms = driver.findElementsByXPath( xPath );
        } catch(NoSuchElementException | StaleElementReferenceException | TimeoutException e) {
            awayTeamForm.add("No Form for Team");
    }