2016-09-30 3 views
0

私はOOPの第一人者ではないですし、多分そこに私はなっておりませんことをより深い何かがあるが、ここで私をたくさん気になるものです:webdriverをナンセンス

私はSelenium WebDriverため、なぜすべての例とチュートリアルいかなる理由が表示されませんWebDriverオブジェクト、たとえば使用している:上記の例で

WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.google.com/"); 
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 

を、我々はTakesScreenshotWebDriverをキャストするためのより多くのコードを追加する必要があります。

FirefoxDriver driver = new FirefoxDriver(); 
driver.get("http://www.google.com/"); 
File scrFile = driver.getScreenshotAs(OutputType.FILE); 

(GhostDriverを除く)すべてのドライバオブジェクトは、ほかに+最終的にいくつかのより多くのALL WebDriverのメソッドを実装します。私たちは直接FirefoxDriverオブジェクトを使用することができるときなぜこれを行います。したがって、基本的には、WebDriverインターフェイスを間接的に実装するため(から継承し、すべてのドライバがWebDriverインターフェイスを実装しているため)、またはChromeDriverいずれかのオブジェクトが必要です。

したがって、実際のドライバをWebDriverとして作成するのではなく、鋳造などでコードを複雑にするのはなぜですか?

FirefoxDriver(たとえば)の代わりにWebDriverを使用するほうがよい場合は、実際の例を教えてください。

+3

これは、基本的には、なぜインタフェースを使用すべきかということに根ざしています。あなたの具体的な例ではそれほど意味をなさないかもしれませんが、再構築しなくても実際にどのドライバを使用するかを設定したいと思っています。設定されているものを返す 'WebDriver getConfiguredDriver()'のようなメソッドを持つ 'DriverProvider'クラスがあります。次に、何か「WebDriver driver = DriverProvider.getConfiguredDriver();」を実行して完了します。あとで 'SafariDriver'を追加したいのであれば、別の設定を追加するだけですが、残りのコードを変更する必要はありません。 – Thomas

+1

"FirefoxDriver(たとえば)の代わりにWebDriverを使用するほうがよい場合は、実際の例を教えてください。 firefoxとchromeで同じテストを実行したいとき。 –

+0

@トーマス私はあなたのポイントを参照してください。結論は:単純な簡単なスクリプト/プログラムを使用する場合は、インターフェイスに対してコーディングする必要はありませんが、Seleniumを使用してフレームワークを構築する場合、インターフェイスに対してコードを作成する必要があります。同意しますか? – CuriousGuy

答えて

1

@CuriousGuyここでは、testNGスイートのコンフィグレーション(パラメータとして渡す)に基づいてドライバオブジェクトをインスタンス化して、別のブラウザでUATをテストする必要がある例を示します。 TestNGのスイート

<suite parallel="test" Thread-count=2> 
<test> 
    <parameter name="browser" value="FF"/> 
    <classes> 
     <class name="package.MyClassname"/> 
    </classes> 
</test> 
<test> 
    <parameter name="browser" value="Chrome"/> 
    <classes> 
     <class name="package.MyClassname1"/> 
    </classes> 
</test> 

我々は動的

class TestInit{ 
WebDriver driver; 
@BeforeClass 
@Parameters({"browser"}) 
public void intBowser(String browser){ 
    switch(browser){ 
     case "FF" : 
      driver = new FireforDriver(); 
      break; 
     case "Chrome": 
      System.setProperty("webdriver.chrone.driver","path to your chromeDriver.exe"); 
      driver = new ChromeDriver(); 
      break; 
     default: 
      Logger.log("No available Driver"); 
    } 
    driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS); 
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    driver.navigate().to("http://www.seleniumhq.org/"); 
} 
@AfterClass 
public void cleanup(){ 
    driver.close(); 
    driver.quit(); 
} 
} 

class Myclassname extends TestInit { 
@Test 
public void yourTestMethod(){ 
    // Dynamically selected driver object will be available here. 
} 
} 

を(OOPの多型の概念を)ブラウザオブジェクトを選択しているwebdriverをナンセンスではない、という希望、それは完全な意味があります:)実用的につかいます。

関連する問題