2012-02-26 6 views
5

for 루프를 통해 여러 브라우저에서 동일한 테스트를 실행하려고하지만 항상 Firefox에서만 실행됩니다.셀레늄 웹 드라이버를 사용하여 여러 브라우저에서 테스트 실행

bros = ['FIREFOX','CHROME','INTERNET EXPLORER'] 

for bro in bros: 
    print "Running "+bro+"\n" 
    browser = webdriver.Remote(
        command_executor='http://10.236.194.218:4444/wd/hub', 
        desired_capabilities={'browserName': bro, 
              'javascriptEnabled': True}) 
    browser.implicitly_wait(60000) 
    browser.get("http://10.236.194.156") 

흥미로운 관찰 하나; platform: WINDOWS 매개 변수를 포함 시키면 Internet Explorer에서만 실행됩니다.

Selenium Webdriver가 이러한 방식으로 작동합니까? 아니면 제 이해가 잘못 되었습니까?

답변

6

는 사실은 잘 날 위해, 자바에 다음 작품을 이런 짓을했는지 :

... 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
... 

DesiredCapabilities[] browsers = {DesiredCapabilities.firefox(),DesiredCapabilities.chrome(),DesiredCapabilities.internetExplorer()}; 
    for(DesiredCapabilities browser : browsers) 
    { 
     try{ 
      System.out.println("Testing in Browser: "+browser.getBrowserName()); 
      driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub"), browser); 
      ... 
당신은 당신이 다른 언어로 테스트를 작성하는 경우 물론이 적응해야합니다

가, 내가 아는 그것을 가능 자바에서는 그렇지 않다는 것을 확신하지 못한다.

나는 또한 당신이하려는 것에 동의한다. 코드를 여러 번 복제하는 것과는 달리, 다른 브라우저에서 동일한 테스트를 실행하는 클래스를 만드는 것이 훨씬 낫다.Java/다른 코드에서이 작업을 수행하는 경우 Page Object을 사용하는 것이 좋습니다.

행운을 빈다.

+0

감사합니다. 비슷한 방법으로 시도하고 진행 상황을 알려 드리겠습니다. :-) – pprakash

+0

같은 브라우저의 여러 인스턴스를 실행 해 보셨습니까? 크롬으로 시도하고 있지만 실패하고 있지만 내 생성자는 새 ChromeDriver()로 시작합니다. 이 일을하는 방법이 있다고 생각합니까? – Johnydep

0

선택한 브라우저로 여러 테스트 클래스 (또는 webdriver 인스턴스)를 생성해야합니다. Webdriver는 하나의 브라우저로 정의됩니다.

+0

을 할 수있는 속성을 추가하여이 에 대한 타자의 결과를 제공 고리. 'browser.get()'다음에는'browser.close()'함수가 있습니다. 따라서 for 루프가 다음 반복을 시작할 때 새로운 bro 변수에 특정한 드라이버로 새 드라이버 객체를 만들어야합니다. – pprakash

0

Coretek에 따르면 여러 개의 웹 드라이버 인스턴스가 필요합니다. selenium-server .jar 파일을 실행하고 서버 인스턴스를 실행할 브라우저를 지정하는 인수를 각각 제공해야합니다.

Internet Explorer의 인수는 * iexplore이고 firefox의 인수는 * firefox이며 chrome의 인수는 * chrome입니다. 이것들은 -forcedBrowserMode 인수입니다. 그렇지 않으면 셀레늄은 실행해야 할 대상을 알 수 없습니다. 테스트를 위해 * iexploreProxy를 사용해야 할 수도 있습니다. * iexplore 모드보다 더 잘 작동하는 경우도 있습니다.

체크 아웃 유용 할 수 이상의 인수에 대한 링크 : 바로 당신을 가지고있는 경우

http://seleniumforum.forumotion.net/t89-selenium-server-command-options-while-starting-server

+0

답변 해 주셔서 감사합니다. 문서의 어디에도 언급되지 않았습니다. 새로운 브라우저 유형마다 별도의 서버 인스턴스가 있어야하며 단일 셀렌 서버 인스턴스를 사용하고 Selenium RC를 사용하여 IE, FF, Chrome 및 Safari에 액세스하는 데 사용했습니다. 또한 * iexplore/* firefox의 인수 모델은 Selenium RC 용입니다. 그렇지 않습니까? Selenium 2.0 (Webdriver)을 사용하여 테스트 케이스를 작성하려고합니다. 저에게 도움이되는 문서가 있으면 알려주십시오. – pprakash

+0

여전히 Webdriver 2.6에서 작동합니다 (잠시 업데이트하지 않았습니다). – TheDawg

+0

호스트 및 노드로 selinium을 실행하면 원하는 모든 브라우저에 대해 구성 파일을 제공 할 수 있습니다 (또는 동일한 시스템에 들어갈 수 있음)) –

1

그래서, 당신은 하나 개의 테스트 케이스를 가지고이 다른 브라우저에 대해 테스트 할 수 싶어요.

가능한 경우에도 루프가 좋은 생각이라고 생각하지 않습니다. (atm은 모르겠습니다).

아이디어는 특정 브라우저로 연결하기 위해 모든 브라우저를 실행하지 않고 특정 브라우저 (JUnit 철학)로 실행되는 모든 테스트 사례를 독립 실행 형으로 테스트 할 수있게하는 것입니다.

그래서 특정 브라우저와 특정 테스트 케이스로 WebDriver를 만들어야합니다.

각 브라우저에 대한 테스트 케이스 클래스 파일을 만들어 별도의 테스트 케이스를 제안합니다.

좋아요 : FirefoxTestOne.java, IeTestOne.java, ChromeTestOne.java.

FirefoxTestOne에서 여러 개의 firefox 테스트를 문제없이 추가 할 수 있습니다. 그들은 JUnit 철학을 통해 특정 순서로 처형 될 것이라고 보장하지 않습니다.

링크 및 자습서는 google에 문의하십시오. 이미 작성된 예제가 있습니다.

0

이 방법 (첨부 된 URL)이 나를 위해 일했습니다.

http://blog.varunin.com/2011/07/running-selenium-tests-on-different.html

이하의 점은 실시 예와 다르다.

@Parameters 
public static List data() { 
    return Arrays.asList(new Object[][]{{"firefox"},{"ie"}}); 
} 
@Before 
public void setUp() throws Exception { 
    System.out.println("browser: " + browser); 
    if(browser.equalsIgnoreCase("ie")) { 
     System.setProperty("webdriver.ie.driver", "IEDriverServer64.exe"); 
     driver = new InternetExplorerDriver(); 
    } else if(browser.equalsIgnoreCase("firefox")) { 
     driver = new FirefoxDriver(); 
0

당신은 셀레늄 + TestNG를이 조합 TestNG를 사용할 수는 매개 변수 당신은 내가의 내부에 할 노력하고있어 사용자들은이

관련 문제