2012-02-26 49 views
5

Tôi đang cố gắng chạy cùng một thử nghiệm trên nhiều trình duyệt thông qua vòng lặp nhưng nó luôn chạy trên Firefox.Sử dụng trình điều khiển web selen để chạy thử nghiệm trên nhiều trình duyệt

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

Một quan sát thú vị; khi tôi bao gồm thông số platform: WINDOWS, nó chỉ chạy trên Internet Explorer.

Trình quản lý trang web Selenium có hoạt động theo cách này hay hiểu biết của tôi sai?

Trả lời

6

Tôi thực sự đã làm điều này trong java, các công việc sau tốt cho tôi:

... 
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); 
      ... 

Bạn sẽ cần phải thích nghi với điều này tất nhiên nếu bạn đang viết các bài kiểm tra của bạn bằng một ngôn ngữ khác nhau, tôi biết nó có thể trong Java, không chắc chắn về cách khác.

Ngoài ra, tôi đồng ý với những gì bạn đang cố gắng làm, tôi nghĩ tốt hơn là nên có một lớp chạy các kiểm tra tương tự với các trình duyệt khác nhau, thay vì sao chép mã nhiều lần và không phù hợp.Nếu bạn đang làm điều này trong Java/các mã khác, tôi cũng khuyên bạn nên sử dụng một Page Object.

Chúc may mắn!

+0

Cảm ơn, tôi sẽ cố gắng theo cách tương tự và cập nhật cho bạn về tiến độ. :-) – pprakash

+0

bạn đã thử chạy nhiều phiên bản của cùng một trình duyệt chưa? Tôi đang cố gắng với chrome nhưng nó là không, nhưng constructor của tôi bắt đầu với ChromeDriver mới(). bạn nghĩ có cách nào để làm điều này? – Johnydep

0

Bạn sẽ phải tạo nhiều lớp thử nghiệm (hoặc trường hợp webdriver) với các trình duyệt đã chọn. Trình điều khiển Web được xác định bằng một trình duyệt.

+0

Đó là những gì tôi đang cố gắng để làm bên trong cho vòng lặp. Sau 'browser.get()' tôi có hàm 'browser.close()'. Do đó khi vòng lặp for bắt đầu lặp lại tiếp theo, nó sẽ tạo một đối tượng trình điều khiển mới với trình điều khiển cụ thể cho biến bro mới. – pprakash

0

Vì Coretek cho biết bạn cần nhiều phiên bản webdriver. Bạn sẽ cần chạy tệp .jar selenium-server và cung cấp cho mỗi người một đối số xác định trình duyệt mà bạn muốn cá thể máy chủ đó chạy.

Đối số cho Internet Explorer là * iexplore, đối số cho firefox là * firefox và đối số cho chrome là * chrome. Đây là các đối số -forcedBrowserMode. Nếu không, selenium sẽ không biết nó nên chạy như thế nào. Bạn có thể cần sử dụng * iexploreProxy cho các bài kiểm tra của mình, đôi khi nó hoạt động tốt hơn chế độ * iexplore.

Kiểm tra liên kết này cho các đối số nhiều có thể hữu ích:

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

+0

Cảm ơn bạn đã trả lời. Nó không được đề cập ở bất kỳ đâu trong tài liệu cho mỗi loại trình duyệt mới, chúng ta cần có cá thể máy chủ riêng và tôi đã sử dụng cá thể máy chủ selen đơn và sử dụng nó để truy cập IE, FF, Chrome & Safari bằng cách sử dụng Selenium RC. Và cũng là mô hình đối số của * iexplore/* firefox dành cho Selenium RC, phải không? Tôi đang cố gắng tạo ra trường hợp thử nghiệm bằng cách sử dụng Selenium 2.0 (Webdriver). Hãy chỉ cho tôi nếu có bất kỳ tài liệu nào giúp tôi. – pprakash

+0

Nó vẫn hoạt động với Webdriver là 2.6 (Tôi chưa cập nhật trong một thời gian) – TheDawg

+0

Nếu bạn chạy selinium làm máy chủ và nút, bạn có thể cung cấp tệp cấu hình cho tất cả trình duyệt bạn muốn (hoặc có thể vừa trên cùng một máy) –

1

Vì vậy, nếu tôi có bạn đúng, bạn có một testcase và muốn điều này được kiểm tra đối với các trình duyệt khác nhau.

Tôi không nghĩ rằng vòng lặp là một ý tưởng hay ngay cả khi có thể (tôi không biết atm).

Ý tưởng là để có thể kiểm tra tất cả các testcase độc ​​lập trên chạy với một trình duyệt cụ thể (đó là triết lý JUnit), không chạy tất cả để có được trình duyệt cụ thể đó.

Vì vậy, bạn cần tạo một WebDriver với trình duyệt cụ thể và testcase cụ thể.

Tôi khuyên bạn nên tách riêng các testcases bằng cách tạo một tệp lớp testcase cho mỗi trình duyệt.

Giống như: FirefoxTestOne.java, IeTestOne.java, ChromeTestOne.java.

Lưu ý rằng bạn có thể thêm nhiều kiểm tra firefox trong FirefoxTestOne mà không gặp sự cố. Không đảm bảo rằng chúng sẽ được thực hiện theo một thứ tự cụ thể thông qua (triết lý JUnit).

Để biết các liên kết và hướng dẫn, hãy hỏi google. Đã có rất nhiều ví dụ được viết.

0

Bằng cách này (url được đính kèm) đã hoạt động đối với tôi.

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

Các điểm sau đây khác với ví dụ.

@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

Bạn có thể sử dụng TestNG cho sự kết hợp này của selen + testng mang đến cho bạn một kết quả bột cho này chỉ bằng cách thêm thuộc tính các thông số bạn có thể làm điều này

Các vấn đề liên quan