2016-10-12 4 views
0
 if (platform != null) { 
         for (final String p : platform) { 
          log.info("Platform " + p); 
          executorService.submit(new Runnable() { 

           @Override 
           public void run() { 
            // TODO Auto-generated method stub 
            try { 
             runService(p, config, url, title, report); 
            } catch (Exception e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 
           } 
          }); 

         } 

         executorService.shutdown(); 
         executorService.awaitTermination(Long.MAX_VALUE, 
           TimeUnit.NANOSECONDS); 

         // for(final String p: platform){ 
         // runUIService(p, config, url, title, report); 
         // } 
        } 

    public void runService(){ 
       WebDriver driver = getDriver(); 
//some selenium operations performed 
    } 

Ich versuche runService() in mehreren Threads parallel auszuführen. Die Methode getDriver() gibt eine neue Instanz von Selen WebDriver zurück. Wenn ich für eine einzelne Plattform ausführe, laufen alle Selenium-Operationen erfolgreich, aber wenn derselbe Code für mehrere Plattformen abgefeuert wird, obwohl für jede Plattform eine neue Browser-Instanz geöffnet wird, erhalte ich viele Fehler bei Selenelementen, die nicht gefunden werden. Was kann der Grund dafür sein? Besteht ein Problem darin, mehrere Browser-Instanzen gleichzeitig durch Selenium laufen zu lassen?Selenium Mehrere Browserinstanzen parallel ausführen

Antwort

0

Ich denke, das ist ein Nebenläufigkeitsproblem. Haben Sie versucht, ein synchronisiertes Schlüsselwort für Ihre Methode zu verwenden? ie öffentliche synchronisierte void runService()

oder in Ihrer Methode getDriver().

Hoffe, das kann helfen.

Verwandte Themen