2017-05-20 1 views
0

prof. phd. Boni Garcia hat ein großartiges Tool für den QA Automation WebDriverManager entwickelt.BrowserManager Implementierung von BrowserFactory

Wie man auf dem Github machte er eine große Lösung für die nicht das Herunterladen manuell aktuelle Version des Browsers sehen kann, und für nicht absolute Pfadvariablen Einstellung

System.setProperty („webdriver.chrome.driver“, „/ absolut/pfad/zu/binär/chromedriver ");

Ich werde Ihnen jetzt zeigen, wie Sie es einrichten und verwenden können, wenn Sie Partikularisierung in Ihrem Projekt verwenden. Grundsätzlich ist es die Implementierung von Browser Factory und ich habe es mit TestNG, Maven und Selenium gemacht.

Zuerst in Ihrem pom.xml hinzufügen

<dependency> 
    <groupId>io.github.bonigarcia</groupId> 
    <artifactId>webdrivermanager</artifactId> 
    <version>1.6.2</version> 
</dependency> 

BrowserFactory-Klasse im Projekt wie folgt erstellen:

import io.github.bonigarcia.wdm.*; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.chrome.ChromeOptions; 
import org.openqa.selenium.edge.EdgeDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.htmlunit.HtmlUnitDriver; 
import org.openqa.selenium.ie.InternetExplorerDriver; 
import org.openqa.selenium.opera.OperaDriver; 
import org.openqa.selenium.phantomjs.PhantomJSDriver; 
import org.openqa.selenium.phantomjs.PhantomJSDriverService; 
import org.openqa.selenium.safari.SafariDriver; 

import java.util.HashMap; 
import java.util.Map; 
import java.util.concurrent.TimeUnit; 


public class BrowserFactory { 

    public static WebDriver GetBrowser(String browserName) { 
     browserName = browserName.toLowerCase(); 

     if(browserName.equals("chrome")) 
      return getChromeInstance(); 

     if(browserName.equals("edge")) 
      return getEdgeInstance(); 

     if(browserName.equals("ie")) 
      return getIEInstance(); 
     if(browserName.equals("phantomjs")) 
      return getPhantomJSInstance(); 

     if(browserName.equals("opera")) 
      return getOperaInstance(); 
     else 
      return getFFInstance(); 
    } 

    private static FirefoxDriver getFFInstance() { 

     FirefoxDriverManager.getInstance().setup(); 
     FirefoxDriver driver=new FirefoxDriver(); 
     return driver; 
    } 

    private static ChromeDriver getChromeInstance() { 

     ChromeDriverManager.getInstance().setup(); 


     Map<String, Object> prefs = new HashMap<String, Object>(); 
     prefs.put("profile.default_content_setting_values.notifications", 2); 
     prefs.put("credentials_enable_service", false); 
     prefs.put("password_manager_enabled", false); 

     ChromeOptions options = new ChromeOptions(); 
     options.setExperimentalOption("prefs", prefs); 

     ChromeDriver driver = new ChromeDriver(options); 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
     driver.manage().window().maximize(); 

     return driver; 
    } 


    private static InternetExplorerDriver getIEInstance() { 

     InternetExplorerDriverManager.getInstance().setup(); 
     InternetExplorerDriver driver=new InternetExplorerDriver(); 
     return driver; 
    } 

    private static PhantomJSDriver getPhantomJSInstance() { 

     PhantomJsDriverManager.getInstance().setup(); 
     PhantomJSDriver driver=new PhantomJSDriver(); 
     return driver; 
    } 


    public static EdgeDriver getEdgeInstance() { 
     EdgeDriverManager.getInstance().setup(); 
     EdgeDriver driver=new EdgeDriver(); 
     return driver; 
    } 

    public static OperaDriver getOperaInstance() { 
     OperaDriverManager.getInstance().setup(); 
     OperaDriver driver=new OperaDriver(); 
     return driver; 
    } 
} 

Jetzt in Ihrem TestNG testing.xml Browser Parameter hinzuzufügen, wie folgt aus:

<suite name="YTCommentator" > 

    <parameter name="browser" value="chrome"/> 

    <test name="YTComments"> 

     <parameter name="email" value=""/> 

     <parameter name="password" value=""/> 

     <parameter name="searchFor" value=""/> 

     <parameter name="comment" value=""/> 

     <parameter name="repeatTimes" value=""/> 

     <classes> 

      <class name="CommentsTest" /> 

     </classes> 

    </test> 

</suite> 

Fügen Sie in Ihrem Test einen neuen @BeforTest mit diesem Parameter

hinzu
@BeforeTest 
@Parameters({"browser"}) 
public void setup(String browser){ 

    driver =BrowserFactory.GetBrowser(browser); 

} 

Und das ist alles :)

Problem ist, dass nur Chrome jetzt mit WebDriverManager arbeitet. Andere Fahrer wie FF haben Fehler: ((

1495307903858 geckodriver INFO Hören auf 127.0.0.1:36758

1495307904514 geckodriver :: mariniert INFO Start Browser \ \ C: \ Program Files (x86) \ Mozilla Firefox \ firefox.exe mit args [ "-marionette"]

1495307904773 addons.manager ERROR Start nicht gestartet: [Exception ... "Component zurückgegeben Fehlercode: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIFile.create]" nsresult: „0x80070057 (NS_ERROR_ILLEGAL_VALUE) "location:" JS frame :: resource: //gre/modules/FileUtils.jsm :: FileUtils_getDir :: Zeile 70 "data: no] Stack-Trace: FileUtils_getDir() @resource: //gre/modules/FileUtils.jsm : 70 < FileUtils_getFile() @resource: //gre/modules/FileUtils.jsm: 42 < AddonManagerInternal.validateBlocklist() @resource: //gre/modules/AddonManager.jsm: 700 < AddonManagerInternal.startup() @resource: // gre /modules/AddonManager.jsm:870 < this.AddonManagerPrivate.startup() @resource: //gre/modules/AddonManager.jsm: 3033 < amManager.prototype.observe() @resource: //gre/components/addonManager.js : 65

JavaScript Fehler: Ressource: //gre/modules/AddonManager.jsm, Zeile 1677: NS_ERROR_NOT_INITIALIZED: Addonmanager nicht

1495307905408 Marionette INFO auf Port 55052 initialisiert

JavaScript-Fehler: Ressource: //gre/modules/AddonManager.jsm, Zeile 2585: NS_ERROR_NOT_INITIALIZED: Kann nicht erstellen Sie neue Remote-Sitzung: Addonmanager ist nicht

org.openqa.selenium.SessionNotCreatedException initialisiert. gewünschte Fähigkeiten = Fähigkeiten [{moz: firefoxOptions = {binär = Optional.leer, args = [], alt = null, logLevel = null, prefs = {}, profile = null}}], erforderliche Fähigkeiten = Fähigkeiten [{moz: firefoxOptions = {binary = Optional.leer, args = [], alt = null, logLevel = null, prefs = {}, profile = null}}]

Build-Info: Version: '3.3.1', Revision: '5234b325d5', Uhrzeit: ' 2017-03-10 09:10:29 +0000 '

Systeminfo: Host:' HP ', ip:' 192.168.10.101 ', Betriebssystemname:' Windows 10 ', os.arch:' amd64 ' , os.version: '10 .0' , java.version: '1.8.0_101'

Treiber Info: driver.version: FirefoxDriver

bei org.openqa.selenium.remote.ProtocolHandshake.createSession (ProtocolHandshake.java : 126)

Bitte aktualisieren Sie WebDriverManager und wir haben ein großartiges Werkzeug, das uns in der Automatisierung und CI helfen wird!

+1

Ich würde vorschlagen, Ihre Frage zu bearbeiten, indem Sie weniger wortreich, mehr auf den Punkt. Diese Frage ist schwer zu verstehen. – lax1089

Antwort

0

Versuchen Sie, alle Selenium Abhängigkeiten zu 3.4.0 wegen Firefox Gecko Treibers 0.16.1 zu aktualisieren. Es ist nicht auf SeleniumHQ, aber es ist im MVN-Repository verfügbar. Es funktioniert für mich ...

Update: Für Opera sieht es so aus, dass WebDriverManager ältere Treiberversion verwendet. Habe gerade Taobao als Treiber Repo hinzugefügt und es funktioniert gut: OperaDriverManager.getInstance(). UseTaobaoMirror(). Setup();

+0

Großartig es gelöst Problem für FF! Aber es funktioniert nicht für andere Fahrer. Ich denke, dass der Webdriver-Manager aktualisiert werden muss. –

+0

hier ist für IE und Selen 3.4.0 private statische InternetExplorerDriver getIEInstance() { InternetExplorerDriverManager.getInstance(). Version ("3.4"). Setup(); DesiredCapabilities Fähigkeiten = DesiredCapabilities.internetExplorer(); capabilities.setCapability (CapabilityType.ACCEPT_SSL_CERTS, true); capabilities.setCapability (InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); capabilities.setCapability (InternetExplorerDriver.IGNORE_ZOOM_SETTING, true); InternetExplorerDriver-Treiber = neuer InternetExplorerDriver (Funktionen); Rückfahrtreiber; } –