2016-09-30 6 views
0

내가 OOP 전문가 아닙니다 어쩌면 여기가 내가받지 오전 깊은 일이지만, 나에게 많이 괴롭히는 것입니다 :WebDriver 말도

내가 어떤 이유가 표시되지 않습니다 왜 Selenium WebDriver에 대한 모든 예제 및 자습서 WebDriver 물체, 예를 들어 사용 : 위의 예에서

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

을, 우리는 WebDriverTakesScreenshot에 캐스팅을 위해 더 많은 코드를 추가해야합니다.

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

(GhostDriver 제외) 모든 드라이버 개체를 추가로 좀 더 결국 모든 WebDriver 방법 +를 구현 : 우리가 직접 FirefoxDriver 개체를 사용할 수있을 때 왜 이렇게. 따라서 기본적으로 WebDriver 인터페이스를 간접적으로 구현하기 때문에 (을 상속하는 모든 드라이버가 WebDriver 인터페이스를 구현하기 때문에) WebDriver 개체가 필요하기 때문에 FirefoxDriver 또는 ChromeDriver 아무 곳이나 사용할 수 있습니까?

따라서 '실제'드라이버를 WebDriver으로 생성하는 대신에 사용하고 주물로 코드를 복잡하게 만드는 등의 이유가 있습니까?

예를 들어 FirefoxDriver 대신 WebDriver을 사용하는 것이 더 효과적인 경우 실용적인 예를 제공 할 수 있습니까?

+3

기본적으로 인터페이스를 사용해야하는 이유는 기본적으로 다릅니다. 구체적인 예에서는별로 의미가 없지만 재구성하지 않고 실제로 어떤 드라이버를 사용해야하는지 설정할 수 있다고 가정합니다. 설정되어있는 것을 반환하는'WebDriver getConfiguredDriver()'와 같은 메소드를 가진'DriverProvider' 클래스가있을 수 있습니다. 그런 다음 'WebDriver driver = DriverProvider.getConfiguredDriver();'를 수행하고 완료하십시오. 나중에 'SafariDriver'를 추가하고 싶다면 다른 설정을 추가하기 만하면 나머지 코드는 변경할 필요가 없습니다. – Thomas

+1

"FirefoxDriver 대신 WebDriver를 사용하는 것이 더 나은 경우 실용적인 예를 들어 주시겠습니까?" 파이어 폭스와 크롬에서 같은 테스트를하고 싶을 때. –

+0

@ 토마스 귀하의 요지를 봅니다. 결론은 다음과 같습니다. 간단한 간단한 스크립트/프로그램을 사용하면 인터페이스에 대해 코딩 할 필요가 없지만 Selenium을 사용하여 일종의 프레임 워크를 작성한다면 인터페이스에 대해 코딩해야합니다. 동의하니? – CuriousGuy

답변

1

@CuriousGuy 여기에서 예제는 다른 브라우저에서 UAT를 테스트하기 위해 testNG 패키지에서 구성 (매개 변수로 전달)을 기반으로 드라이버 객체를 인스턴스화해야하는 예제입니다. 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> 

우리는 WebDriver는 말도하지

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의 다형성 개념) 동적으로 브라우저 객체를 선택하는 것, 그것은 전체 의미가 있습니다 :) 실제에 용도.

관련 문제