我希望能够根据用户选择在循环中声明一个selenium驱动程序。我希望驱动程序被称为驱动程序,无论它是哪种类型,因此我可以将其用于所有内容,而不是为IE和Firefox分别设置一组代码。我希望这是有道理的,我对Java很新。
switch (browserId){
case 1:
FirefoxDriver driver = new FirefoxDriver();
case 2:
InternetExplorerDriver driver = new InternetExplorerDriver();
default:
System.out.println("An error has occurred, the program will now close.");
System.exit(0);
}
这会产生一个编译错误,因为我有两个名为driver的变量,但是我不应该同时存在它们。有办法解决这个问题吗?
答案 0 :(得分:2)
我希望驱动程序被称为驱动程序,无论它是哪种类型, 这样我就可以将它用于一切而不是一个 用于IE和Firefox的单独代码集。
如果这两个类都实现了Driver
接口(或者是WebDriver
?),那么你可以简单地执行
Driver driver = null;
switch (browserId){
case 1:
driver = new FirefoxDriver();
break;
case 2:
driver = new InternetExplorerDriver();
break;
default:
System.out.println("An error has occurred, the program will now close.");
System.exit(0);
}
现在您可以使用driver
,但请检查null
。
您无法执行此操作的原因是switch
块开始范围。如果声明名为driver
的变量,则无法在同一范围内重新声明具有相同名称的另一个变量。
答案 1 :(得分:1)
你可以这样做:
WebDriver driver; // <-- move outside the switch
switch (browserId){
case 1:
driver = new FirefoxDriver();
break; // <-- add breaks
case 2:
driver = new InternetExplorerDriver();
break;
default:
// exceptions are more welcome than System.exit();
throw new IllegalArgumentException("wrong browserId: " + browserId);
}
答案 2 :(得分:0)
如果它们都来自公共类型,则在变换器外部声明变量。
Driver d = null;
switch(browserId){
case 1:
d = new FireFoxDriver();
break; // don't forget!!
case 2:
d = new InternetExplorerDriver();
break;
... // omitting other cases and default
}
如果没有,那么你需要在每个case语句中使用不同的名称。