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!
Ich würde vorschlagen, Ihre Frage zu bearbeiten, indem Sie weniger wortreich, mehr auf den Punkt. Diese Frage ist schwer zu verstehen. – lax1089