2012-02-13 29 views
8

Tôi đang sử dụng Ubuntu 11.04 và selen 2.9.0 Dưới đây là làm thế nào nó được cấu hình trong pom gốc của tôi:Làm thế nào tôi có thể cấu hình trình quản trị web selen để sử dụng thiết lập firefox tùy chỉnh cho các thử nghiệm?

<dependency> 
    <groupId>org.seleniumhq.selenium</groupId> 
    <artifactId>selenium-java</artifactId> 
    <version>2.9.0</version> 
    <scope>test</scope> 
</dependency> 

Khi attemting để chạy một kiểm tra, tôi nhận được một ngoại lệ:

org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output: 
*** LOG addons.xpi: startup 
*** LOG addons.xpi: Ignoring file entry whose name is not a valid add-on ID: > /tmp/anonymous3804893394247066972webdriver-profile/extensions/webdriver-staging 
*** LOG addons.xpi: checkForChanges 
*** LOG addons.xpi: No changes found 

    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:95) 
    .... 

Như xa như tôi đã googled nó, vấn đề là trình điều khiển firefox mà selenium sử dụng không tương thích với phiên bản của trình duyệt. Có trong tâm trí các bản cập nhật thường xuyên phát hành firefox, nó sẽ rất khó để duy trì môi trường thử nghiệm địa phương của tôi. Vì vậy, tôi đã quyết định cài đặt một firefox tĩnh với phiên bản mới nhất được biết đến với tôi và sử dụng selen với nó, trong khi vẫn bảo quản firefox mặc định của tôi (tôi không phải loại bỏ nó).

Vì vậy, tôi không chắc chắn làm thế nào để thiết lập cấu hình selen của tôi để làm cho nó hoạt động với firefox tĩnh. Có lẽ tôi phải cấu hình ứng dụng của tôi để nhận được đường dẫn đến nhị phân firefox cho trình điều khiển để sử dụng? Tôi muốn biết liệu có cần điều gì khác không.

** Sửa

Tôi đang sử dụng thuộc tính cấu hình để khởi tạo webdriver thích hợp:

public abstract class SeleniumTestBase { 

    ... 

    public final void setUp() throws Exception { 
     String driverClass = getConfigurationProperty("selenium.webDriverClass"); 
     driver = (WebDriver) Class.forName(driverClass).newInstance(); 
     ... 
     doSetUp(); 
    } 

    public void doSetUp() { 
    } 

    ... 
} 

Thuộc tính "selenium.webDriverClass" là dễ quản lý bởi các pom.xml hồ sơ do khác nhau có thể có giá trị khác nhau. Hiện tại nó là FQN của lớp trình điều khiển được khởi tạo.

Trả lời

15

Chừng nào tôi còn biết rằng lệnh java

WebDriver driver = new FirefoxDriver(); 

sẽ chạy trình duyệt Firefox được cài đặt trên máy tính của bạn.

nhưng đọc javadoc tại http://selenium.googlecode.com/svn/trunk/docs/api/java/index.html tôi nhận ra rằng có thể có cách làm thế nào để ghi đè lên nó:

FirefoxBinary binary = new FirefoxBinary(new File("path/to/binary")); 
FirefoxProfile profile = new FirefoxProfile(); 
WebDriver driver = new FirefoxDriver(binary, profile); 
+0

là có một cách để làm điều này bằng cách sử dụng API RemoteWebDriver? Tôi đã không đề cập đến, nhưng chúng tôi đang sử dụng mùa xuân để nhanh chóng trình điều khiển web và do đó ở trên khó có thể xảy ra. Một cách khác là sử dụng phương thức factory và factory với spring cho mỗi driver, và 2 properteis cho tên và giá trị của thuộc tính path nhị phân, vì vậy mỗi driver cụ thể sẽ được cấu hình bởi nhà máy. Tuy nhiên, tôi muốn prerfer để làm điều này với ít mã nếu có thể. –

+0

RemoteWebDriver khá mới mẻ đối với tôi. Bạn có thể chỉnh sửa câu hỏi và chỉ cho tôi cách khởi tạo RemoteWebDriver cho tôi không? Tôi hy vọng tôi có thể tìm thấy một cái gì đó. Nhưng dù sao đi nữa - FirefoxDriver là phân lớp của RemoteWebDriver ... –

+0

Tôi đã xem lại câu hỏi - bây giờ có mã cho lớp kiểm tra cơ sở selenium. Tôi đang lên kế hoạch để loại bỏ việc khởi tạo dựa trên relfection với một số logic định vị dịch vụ dựa trên tên trình duyệt, vì vậy các thuộc tính pom.xml sẽ là tên trình duyệt và đường dẫn nhị phân nếu cần. Phương pháp nhà máy sẽ kiểm tra xem đường dẫn nhị phân có được cung cấp hay không và sẽ tạo và cấu hình đối tượng trình điều khiển cụ thể một cách thích hợp. –

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