在linux上使用chromedriver和chrome时出现java.lang.Exception初始化错误
我正在windows 10计算机上创建测试(ui测试)。它们工作得很好,但几天前我的老板告诉我,我们需要在linux上运行测试。我下载了linux驱动程序,并在在linux上使用chromedriver和chrome时出现java.lang.Exception初始化错误,java,linux,selenium,selenium-webdriver,selenium-chromedriver,Java,Linux,Selenium,Selenium Webdriver,Selenium Chromedriver,我正在windows 10计算机上创建测试(ui测试)。它们工作得很好,但几天前我的老板告诉我,我们需要在linux上运行测试。我下载了linux驱动程序,并在System.setProperty(“webdriver.chrome.driver”,“chromedriver”)中对其进行了更改但是在尝试运行这个测试之后,我得到了java.lang.ExceptionInInitializerError(它是最新浏览器的最新驱动程序)。之后,我更改了允许我运行测试的代码,但和驱动程序的连接是远程
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");
}
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");
}
linux驱动程序初始化:
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");
}
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");
}
请参见java.lang.ExceptionInInitializeError中的解决方案 表示静态初始值设定项中发生意外异常。引发此错误是为了指示在计算静态初始值设定项或静态变量的初始值设定项期间发生异常 如果静态初始值设定项块中出现错误,将引发ExceptionInInitializerError。下面是一个例子:
class Anton
{
static
{
// if something goes wrong ExceptionInInitializerError will be thrown
}
}
静态变量在静态块中初始化,可能引发这些错误
问题:
- 在Linux驱动程序初始化代码块中,最初您提到:
private static DesiredCapabilities capability = DesiredCapabilities.chrome();
- 然后调用RemoteWebDriver,如下所示:
driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"),capability);
driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"),capability);
- 但在以下步骤中,您再次尝试:
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
- 因为您已经将WebDriver实例声明为:
public static WebDriver driver;
- 接下来,使用
:System.setProperty()
- 由于WebDriver实例(静态)和Web浏览器实例现在处于活动状态,因此在测试执行期间,您不能更改属性
你的linux代码不就是在使用selenium grid吗?@ChukUltima Nope,我不使用selenium grid1)System.setProperty(“webdriver.chrome.driver”,“path/to/chromedriver”);//为什么要更改
System.setProperty(“webdriver.chrome.driver”,“/path/to/chromedriver/for_linux”)代码>linux驱动程序开始工作后?如果它是一个具有不同环境设置的单独用例,请退出()
驱动程序并启动一个新的驱动程序。我们似乎无法相互理解:^)在windows机器上,我使用//System.setProperty(“webdriver.chrome.driver”,“chromedriver.exe”)
在linux上,我尝试了System.setProperty(“webdriver.chrome.driver”,“/path/to/chromedriver/for_linux”)代码>但它在linux上不工作。我应该怎么做才能System.setProperty(“webdriver.chrome.driver”,“/path/to/chromedriver/for_linux”)代码>将在Windows安装程序运行时起作用,忽略与Windows相关的讨论。指定您在Linux系统上面临的问题。