有 Java 编程相关的问题?

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

SoapUI项目执行后的java WebDriver异常

请帮助解决以下问题

我正在使用Eclipse。我的主类调用下面的2类/java文件

1)Invoke_SoapUI_Project.java(执行soapui项目) 2) Run_Selenium_Script.java(这将从Firefox打开一个URL)

我的主函数调用上述Invoke_SoapUI_Project.java并触发“soapuixml项目”的执行,它运行良好

然后,我的第二个函数“Run_Selenium_Script.java”调用并尝试打开网页中的一个。但是在我定义webdriver对象的那一行得到下面的错误。i、 edriver= new firefoxDriver();

但是如果我对Invoke_SoapUI_Project.java进行注释,那么我不会得到下面的异常,firefox对象会正确创建并打开MyURL

我得到以下例外情况:

org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40'
System info: host: 'BDC8-L-HP26ZR1', ip: '127.0.0.1', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_31'
Driver info: driver.version: FirefoxDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:593)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:126)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:99)
    at Services.CommonFunctions.setUp(CommonFunctions.java:1481)
    at Services.CommonFunctions.obj_run(CommonFunctions.java:1631)
    at Services.CSS_Validation_a.print(CSS_Validation_a.java:283)
    at Services.CSS_main.main(CSS_main.java:67)
Caused by: java.lang.NullPointerException
    at org.apache.http.impl.conn.SystemDefaultRoutePlanner.determineProxy(SystemDefaultRoutePlanner.java:79)
    at org.apache.http.impl.conn.DefaultRoutePlanner.determineRoute(DefaultRoutePlanner.java:76)
    at org.apache.http.impl.client.InternalHttpClient.determineRoute(InternalHttpClient.java:124)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:183)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
    at org.openqa.selenium.remote.HttpCommandExecutor.fallBackExecute(HttpCommandExecutor.java:215)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:184)
    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute(NewProfileExtensionConnection.java:165)
    at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.execute(FirefoxDriver.java:362)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572)
    ... 10 more

共 (3) 个答案

  1. # 1 楼答案

    我在使用SOAPUI5时也发现了这个问题。我检查了源代码。 在类ProxyUtils中,如果未设置代理或未将代理设置为自动,则方法setGlobalProxy()proxySelector设置为null

     public static void setGlobalProxy( Settings settings )
        {
        ProxySelector proxySelector = null;
        ProxySettingsAuthenticator authenticator = null;
        if( proxyEnabled )
        {
            if( autoProxy )
            {
            proxySelector = new ProxyVoleUtil().createAutoProxySearch().getProxySelector();
            }
            else
            {
                proxySelector = getManualProxySelector( settings );
            }
            if( proxySelector != null )
            {
                // Don't register any proxies for other schemes
                proxySelector = filterHttpHttpsProxy( proxySelector );
            }
            authenticator = new ProxySettingsAuthenticator();
        }
        *ProxySelector.setDefault( proxySelector );*
        Authenticator.setDefault( authenticator );
        HttpClientSupport.setProxySelector( proxySelector );
        HttpClientSupport.getHttpClient().setCredentialsProvider( getProxyCredentials( settings ) );
        }
    

    在Windows操作系统中,proxySelector = new ProxyVoleUtil().createAutoProxySearch().getProxySelector();也将为空

     if (PlatformUtil.getCurrentPlattform() != PlatformUtil.Platform.WIN) {
                proxySearch.addStrategy(ProxySearch.Strategy.BROWSER);
                // For Windows both BROWSER and OS_DEFAULT will end up with an IEProxySearchStrategy.
                // The call in createPacSelector to winHttpDetectAutoProxyConfigUrl is quite slow and we don't want to do it twice.
            }
    

    我的解决方案是修改ProxyUtils类。将ProxySelector.setDefault( proxySelector );更改为

        if(proxySelector != null){
            ProxySelector.setDefault(proxySelector);
        }
        else{
            proxySelector = ProxySelector.getDefault();
        }
    

    然后我使用我自己的ProxyUtils.class,通过WinRAR或7Z更新soapui-xxx.jar(在SOAPUI_HOME\bin\)中的ProxyUtils.class。现在我的SoapUI工作得很好

  2. # 2 楼答案

    根据link

    您需要设置firefox驱动程序并将其作为系统属性提供。 例如: System.setProperty("webdriver.firefox.driver", "c:/webdriver/firefoxdriverpath");

  3. # 3 楼答案

    我们在这里偶然发现了同样的问题(花了我们相当长的时间),但我们设法解决了它:

    问题似乎是SoapUI将默认proxyselector设置为null,而Apache httpclient不希望出现这种情况

    重现问题:

    WsdlProject wsdlProject = new WsdlProject("");
    WebDriver driver = new FirefoxDriver();
    

    解决方法:

    ProxySelector proxy = ProxySelector.getDefault();
    WsdlProject wsdlProject = new WsdlProject("");
    ProxySelector.setDefault(proxy);
    WebDriver driver = new FirefoxDriver();
    

    peidong hu在两天前为standalone发送了一个补丁(从那里获取解决方案): https://github.com/Ardesco/selenium-standalone-server-plugin/issues/23

    我已经为selenium提交了一个错误报告,将使用以下详细信息更新它:https://github.com/SeleniumHQ/selenium/issues/388

    我还将为SoapUI提交一份报告