我正在使用Selenium Web Driver
填写一个简单的表单:
private WebDriver driver = new FirefoxDriver();
功能:
public boolean fillDetailsInWeb(JsonElement data,String url){
System.out.println("fill in-"+url);
boolean result = false;
try{
driver.navigate().to(url);
}catch(Exception e){
System.out.println("Error in driver " + e.getMessage().toString());
return result;
}
//web elements
try{
WebElement name_to_input = driver.findElement(By.id("ID1"));
WebElement email_to_input = driver.findElement(By.id("id2"));
WebElement message_to_input = driver.findElement(By.id("ID3"));
}catch(NoSuchElementException MSEE){
MSEE.printStackTrace();
}
result = true;
return result;
}
我希望在抓取NoSuchElementException
并将程序转到下一个站点后继续该过程。
这样做的正确方法是什么?
答案 0 :(得分:1)
循环它不会继续下一步。
尝试首先确定哪个元素不存在或者每个步骤进行验证,例如:
try{
WebElement name_to_input = driver.findElement(By.id("ID1"));
}catch(Exception MSEE){
MSEE.printStackTrace();
}
try{
WebElement name_to_input = driver.findElement(By.id("ID2"));
}catch(Exception MSEE){
MSEE.printStackTrace();
}
或
String[] id = {"id1","id2"}
for(int c=0;c<2;c++)
try{
WebElement name_to_input = driver.findElement(By.id(id[c]));
}catch(Exception MSEE){
MSEE.printStackTrace();
}
我只将NoSuchElementException更改为Exception,以便元素存在但不可见。硒仍然进入下一步。
我只是新手,但希望这可以提供帮助。
答案 1 :(得分:1)
正如标题所述,如果您希望即使发生意外异常也要继续执行,您还需要使用 The Finally Block
以及 Try...Catch...
强>阻止。
来自 this 链接:
当try块退出时,finally块始终执行。这确保即使发生意外异常也会执行finally块。但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码。将清理代码放在finally块中总是一种很好的做法,即使没有预期的例外情况也是如此。
所以你的Try Catch块最后会是:
...
try{
driver.navigate().to(url);
}catch(Exception e){
System.out.println("Error in driver " + e.getMessage().toString());
return result;
}
//web elements
try{
WebElement name_to_input = driver.findElement(By.id("ID1"));
WebElement email_to_input = driver.findElement(By.id("id2"));
WebElement message_to_input = driver.findElement(By.id("ID3"));
}catch(NoSuchElementException MSEE){
MSEE.printStackTrace();
} finally {
return result;
}
...