2016-09-09 4 views
1

У меня возникла проблема. Я запускаю тест веб-сервиса SoapUI через мой код автоматизации Java. Но после этого. Селен не работает. Кажется, что часть soapUI на самом деле не сделана. Но я не уверен.После запуска SoapUI не удалось запустить селен

public static void main(String[] args) throws Exception { 
    SoapUIRun srun = new SoapUIRun(); 
    srun.runTestCase("CPIHS", "CPIHS"); 
    new MainPage().LoginCad(); 
} 

ГЗС исключение:

Exception in thread "main" 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.52.0', revision: '4c2593cfc3689a7fcd7be52549167e5ccc93ad28', time: '2016-02-11 11:22:43' 
System info: host: 'GFG-GROUP153', ip: '10.100.1.7', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_102' 
Driver info: driver.version: ChromeDriver 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:665) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:249) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:144) 
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:170) 
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:159) 
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:116) 
    at screens.MainPage.LoginCad(MainPage.java:28) 
    at screens.MainPage.main(MainPage.java:87) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

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:77) 
    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:71) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) 
    at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:144) 
    at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:90) 
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142) 
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:644) 
    ... 13 more 

Однако, я закомментировать SoapUI часть. Он будет работать снова. Как:

public static void main(String[] args) throws Exception { 
    //SoapUIRun srun = new SoapUIRun(); 
    //srun.runTestCase("CPIHS", "CPIHS"); 
    new MainPage().LoginCad(); 
} 

Вот мой метод SoapUI:

public void runTestCase(String tarSuite, String tarCase) throws Exception { 

    String reportStr = ""; 

    TestRunner runner; 

    SoapUI.setSoapUICore(new StandaloneSoapUICore(true)); 

    WsdlProject project = new WsdlProject("C:\\Users\\tshi\\Documents\\Maven Projects\\ASORT\\WebServiceResource\\Suncorp_Issuing-soapui-project.xml"); 

    List<TestSuite> suiteList = project.getTestSuiteList(); 

    for (TestSuite aSuiteList : suiteList) { 

     String suiteName = aSuiteList.getName(); 

     List<TestCase> caseList = aSuiteList.getTestCaseList(); 
     //System.out.println("Test Suite: " + suiteName); 

     if (suiteName.equals(tarSuite)) { 

      for (TestCase aCaseList : caseList) { 

       String caseName = aCaseList.getName(); 
       //System.out.println("Test Case: " + caseName); 

       if (caseName.equals(tarCase)) { 

        long startTime = System.currentTimeMillis(); 

        runner = project.getTestSuiteByName(suiteName).getTestCaseByName(caseName).run(new PropertiesMap(), false); 

        long duration = System.currentTimeMillis() - startTime; 

        reportStr = reportStr + "\n\tTestCase: " + aCaseList.getName() + "\tStatus: " + runner.getStatus() + "\tReason: " + runner.getReason() + "\tDuration: " + duration; 

        System.out.print(reportStr); 

       } 

      } 

     } 

    } 

} 

Вот Селен метод, связанные с:

public void LoginCad(){ 
    System.setProperty("webdriver.chrome.bin", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"); 
    System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); 

    String bank = Integer.toString(48); 
    String emp = Integer.toString(200003); 
    String pwd = "Cadencie1"; 
    String baseUrl = "http://172.16.1.133:8090/AppName/servlet/app"; 

    driver = new ChromeDriver(); 

    driver.get(baseUrl); 

    try { 

     Thread.sleep(1000); 

    } catch(InterruptedException e){ 

     // TO DO Auto-generated catch block 
     e.printStackTrace(); 

    } 

    Utilities.switchToWindow("AppName - User Logon [LOGON]", driver); 

    try{ 

     Thread.sleep(2000); 

    } catch(InterruptedException e){ 

     // TO DO Auto-generated catch block 
     e.printStackTrace(); 

    } 

    driver.findElement(By.id("idBANK")).clear(); 
    driver.findElement(By.id("idBANK")).sendKeys(bank); 

    driver.findElement(By.id("idEMPLOYEE")).clear(); 
    driver.findElement(By.id("idEMPLOYEE")).sendKeys(emp); 

    driver.findElement(By.id("idPASSWORD")).clear(); 
    driver.findElement(By.id("idPASSWORD")).sendKeys(pwd); 

    driver.findElement(By.id("maintLOGON")).click(); 

    driver.findElement(By.id("idPASSWORD")).clear(); 
    driver.findElement(By.id("idPASSWORD")).sendKeys(pwd); 

    driver.findElement(By.id("maint")).click(); 

} 

Каждый имеет какие-либо идеи, почему это произошло. Я искал в Google. Но, похоже, никто не получает такую ​​же ошибку в той же ситуации. Большое спасибо.

+0

Пожалуйста, смотрите, если [это] (http://stackoverflow.com/questions/30397043/selenium-unreachablebrowserexception-could-not-start-a-new- session-in-soapui). – Rao

+0

Спасибо за ваш ответ. К сожалению, они не работают. –

+0

Вы пытались выключить и снова включить? Переустановите все задействованные программы и убедитесь, что это решит проблему. –

ответ

0

Если проблема возникает только с селеном после SoapUI исполнения тогда, вероятно, некоторые SoapUI конфигурации вызывает проблему. Вероятно, проблема связана с тем, что SOAPUI устанавливает прокси-сервер по умолчанию на null, а затем, когда selenium попытается получить прокси, чтобы проверить конфигурацию, получите NullPointerExcetpion.

Основываясь на вас ошибки трассировки:

Caused by: java.lang.NullPointerException 
at org.apache.http.impl.conn.SystemDefaultRoutePlanner.determineProxy(SystemDefaultRoutePlanner.java:79) 

Если вы посмотрите на исходный код org.apache.http.impl.conn.SystemDefaultRoutePlanner класса:

(Обратите внимание, я держать номер строки коррелирует с ошибки трассировки)

53 public class More ...SystemDefaultRoutePlanner extends DefaultRoutePlanner { 
54 
55  private final ProxySelector proxySelector; 
56 
57  public More ...SystemDefaultRoutePlanner(
58    final SchemePortResolver schemePortResolver, 
59    final ProxySelector proxySelector) { 
60   super(schemePortResolver); 
     /* 
      proxySelector ARE NULL AND ProxySelector.getDefault(); 
      RETURNS ALSO NULL DUE THAT SOAPUI PROBABLY MAKE BEFORE 
      ProxySelect.setDefault(null); 
     */ 
61   this.proxySelector = proxySelector != null ? proxySelector : ProxySelector.getDefault(); 
62  } 
63 
64  public More ...SystemDefaultRoutePlanner(final ProxySelector proxySelector) { 
65   this(null, proxySelector); 
66  } 
67 
68  @Override 
69  protected HttpHost More ...determineProxy(
70    final HttpHost target, 
71    final HttpRequest request, 
72    final HttpContext context) throws HttpException { 
73   final URI targetURI; 
74   try { 
75    targetURI = new URI(target.toURI()); 
76   } catch (final URISyntaxException ex) { 
77    throw new HttpException("Cannot convert host to URI: " + target, ex); 
78   } 
      /* HERE IS THE NULLPOINTER */ 
79   final List<Proxy> proxies = this.proxySelector.select(targetURI); 

Обход

Так возможно Soluti on должен позаботиться о себе ProxySelect. Тогда вы можете попробовать с последующим обходным:

import java.net.ProxySelector; 
... 

public static void main(String[] args) throws Exception { 

    // get default proxy before soapui will set it to null 
    ProxySelector proxy = ProxySelector.getDefault(); 

    SoapUIRun srun = new SoapUIRun(); 
    srun.runTestCase("CPIHS", "CPIHS"); 

    // set it again to avoid NPE on selenium 
    ProxySelector.setDefault(proxy); 

    new MainPage().LoginCad(); 
} 
+0

Это потрясающий Альбфик. Это полностью решает мою проблему. Огромное спасибо. –

+0

@ShiTim, пожалуйста! :) – albciff