JAVA在linux上使用chromedriver和chrome时,lang.ExceptionInInitializerError
我正在windows 10机器上创建测试(ui测试)。它们工作得很好,但几天前我的老板告诉我,我们需要在linux上运行测试。我下载了linux驱动程序,并在System.setProperty("webdriver.chrome.driver", "chromedriver");
中对其进行了更改,但在尝试运行此测试后,我得到了java.lang.ExceptionInInitializerError
(这是最新浏览器的最新驱动程序)。之后,我修改了允许我运行测试的代码,但和驱动程序的连接是远程的。我不喜欢这样。也许你们中有人知道哪个驱动程序可以在linux上运行,而不需要在驱动程序初始化部分更改代码
例如。 windows驱动程序初始化:
private static WebDriver driver = new ChromeDriver();
private static WebDriverWait wait = new WebDriverWait(driver, 30);
@Given("^blah blah$")
public void some_method() {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
}
linux驱动程序初始化:
public abstract class InitDrivers{
private static DesiredCapabilities capability = DesiredCapabilities.chrome();
public static WebDriver driver;
static {
try {
driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"),capability);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
public static WebDriverWait wait = new WebDriverWait(driver, 30);
public class CallDoctorTestStep extends InitDrivers{
@Given("^blah blah$")
public void some_method() throws MalformedURLException{
//System.setProperty("webdriver.chrome.driver","chromedriver.exe");
}
参见Selenium NoSuchSession on linux中的解决方案
# 1 楼答案
爪哇。lang.Exception初始化错误
^{} 意味着静态初始值设定项中发生了意外异常。抛出此错误是为了指示在计算静态初始值设定项或静态变量的初始值设定项时发生异常
如果静态初始值设定项块中出现错误,将引发异常InInitializeError。下面是一个例子:
静态变量在静态块中初始化,并可能引发这些错误
问题:
在Linux驱动程序初始化代码块中,最初您提到:
然后调用RemoteWebDriver,如下所示:
但在以下步骤中,您再次尝试:
这一系列事件造成了错误
解决方案:
正如您已经声明的那样,WebDriver实例为:
接下来,使用
System.setProperty()
:现在需要初始化RemoteWebDriver实例,如下所示:
由于WebDriver实例(即
static
)和Web Browser实例现在处于活动状态,测试执行期间,您不得更改属性