2017-05-20 7 views
0

prof。 phd。 Boni GarciaはQA Automation WebDriverManagerのための素晴らしいツールを作った。BrowserManagerのBrowserFactoryの実装

あなたは彼が手動でブラウザの最新バージョンをダウンロードしないための優れたソリューションを作っgithubの上で見ることができるように、絶対パス変数を設定しないため

するSystem.setProperty(「webdriver.chrome.driver」、「/絶対パス/ /バイナリ/クロムドライバ ");

ここでは、プロジェクトで特定化を使用している場合に、どのようにセットアップして使用できるかを示します。基本的にはブラウザファクトリの実装です。TestNG、Maven、Seleniumを使って作成しました。

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; 
    } 
} 

を今すぐあなたのTestNG testing.xmlにブラウザのパラメータを追加し、次のように:

あなたのpom.xmlの最初は、次のようにあなたのプロジェクトにBrowserFactoryクラスを作成します

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

を追加します

<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> 

あなたのテストでは、このパラメータで新しい@BeforTestを追加してください。

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

    driver =BrowserFactory.GetBrowser(browser); 

} 

そして、それはすべて:)

問題であるChromeのみがWebDriverManagerで機能するようになりましたということです。 (127.0.0.1:36758

1495307904514 geckodriverに聞く(

1495307903858 geckodriver INFO ::マリオネットINFOブラウザを起動し、\ \ C:?:\プログラムファイル(x86の)\ Mozilla Firefoxの\ FFのような他のドライバがエラーを持っていますfirefox.exeを引数[ "-marionette"]

1495307904773 addons.managerエラースタートアップで失敗しました:nsresult:「0x80070057が(NS_ERROR_ILLEGAL_VALUE:[例外... "0x80070057が(NS_ERROR_ILLEGAL_VALUE)[nsIFile.create]コンポーネントは、障害コードを返さ" ) "location:" JS frame :: resource://gre/modules/FileUtils.jsm :: FileUtils_getDir :: line 70 "data:no"スタックトレース: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のエラー:リソース://gre/modules/AddonManager.jsm、行1677:NS_ERROR_NOT_INITIALIZED:AddonManagerが

1495307905408マリオネット情報は、ポート55052

にリスニングを初期化されません

JavaScriptのエラー:リソース://gre/modules/AddonManager.jsm、行2585:NS_ERROR_NOT_INITIALIZED:新しいリモートセッションを作成できません:AddonManagerが

org.openqa.selenium.SessionNotCreatedExceptionが初期化されていません。要求されたケイパビリティ=能力[{moz:firefoxOptions = {バイナリ=オプション。インプレス、args = []、レガシー=ヌル、logLevel =ヌル、プリファレンス= {}、プロファイル=ヌル}}] firefoxOptions = {バイナリ=オプション。

ビルドインフォメーション:バージョン: '3.3.1'、リビジョン: '5234b325d5'、時刻: '0'、空白、args = []、レガシー=ヌル、logLevel = null、prefs = 2017-03-10 09:10:29 +0000 '

システム情報:ホスト:' HP '、ip:' 192.168.10.101 '、os.name:' Windows 10 '、os.arch:' amd64 ' 、os.version:'10 .0' 、のjava.version: '1.8.0_101'

ドライバー情報:driver.version:org.openqa.selenium.remote.ProtocolHandshake.createSessionでFirefoxDriver

(ProtocolHandshake.java :126)

WebDriverManagerを更新してください。オートメーションとCIで役立つ優れたツールがあります。

+1

私はあなたの質問をあまり語らないように編集することをお勧めします。この質問は理解しにくいです。 – lax1089

答えて

0

Firefox Geckoドライバ0.16.1のため、すべてのSelenium依存関係を3.4.0にアップデートしてみてください。それはSeleniumHQではなく、mvnリポジトリで利用可能です。それは私のために働きます...

アップデート:Operaの場合、WebDriverManagerは古いバージョンのドライバを使用しているようです。ちょうどドライバのrepoとして淘宝網を追加し、うまく動作します: OperaDriverManager.getInstance()。useTaobaoMirror()。setup();

+0

FFで問題が解決しました!しかし、他のドライバーにとってはうまくいかない。私はwebdriverのマネージャーを更新する必要があると思う。ここで –

+0

はIEとSelenium 3.4.0 プライベート静的InternetExplorerDriver getIEInstance(){ InternetExplorerDriverManager.getInstance()のためのものであるバージョン( "3.4")セットアップ()。。。 DesiredCapabilities capabilities = 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ドライバ=新しいInternetExplorerDriver(機能)。 リターンドライバ。 } –