有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    爪哇。lang.Exception初始化错误

    ^{}意味着静态初始值设定项中发生了意外异常。抛出此错误是为了指示在计算静态初始值设定项或静态变量的初始值设定项时发生异常

    如果静态初始值设定项块中出现错误,将引发异常InInitializeError。下面是一个例子:

    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);
      
    • 但在以下步骤中,您再次尝试:

      System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
      

    这一系列事件造成了错误

    解决方案:

    • 正如您已经声明的那样,WebDriver实例为:

      public  static WebDriver driver;
      
    • 接下来,使用System.setProperty()

      System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver"); // <- remove the .exe part here following Linux style
      
    • 现在需要初始化RemoteWebDriver实例,如下所示:

      driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"),capability);
      
    • 由于WebDriver实例(即static)和Web Browser实例现在处于活动状态,测试执行期间,您不得更改属性

    Note : You can find a detailed discussion in exception in initializer error