2011-12-05 14 views
6

Vì vậy, trong các thử nghiệm hồi quy selen của tôi, tôi đã cố gắng nhấp đúp vào lịch để tạo một appt mới. Tôi đã cố gắng sử dụng doubleClick(); trong thư viện advanceduserinteractions, nhưng có một vấn đề; hai lần nhấp không đủ nhanh/đủ gần nhau để kích hoạt nhấp đúp thực tế! Có ai tìm thấy một cách để đối phó với điều này trong thử nghiệm của họ?Selenium 2.0 Tương tác nâng cao WebDriver Trợ giúp DoubleClick (C#)

+0

cũng, lịch Tôi đang sử dụng các chức năng như thế này một: [link] (http: //google.latest.gwt- web-calendar.appspot.com) – spacebed

+0

Rất tiếc, liên kết không cho phép nhấp đúp vào lịch trống để tạo cuộc hẹn mới. Tuy nhiên tôi đã có thể bấm đúp vào một lịch hiện có và mở nó thành công. Tôi đã sử dụng API hành động mặc dù trong Java. Không chắc chắn nếu đó là một cái gì đó bạn đang tìm kiếm.Tôi có thể gửi mã nếu bạn quan tâm – nilesh

+0

Bạn nói đúng, nhưng ngay cả để mô phỏng nhấp đúp vào một đã đăng ký thậm chí không làm việc cho ứng dụng thực tế của tôi. Tôi quan tâm đến mã mặc dù, vì nó có thể giúp tôi tìm ra C# equivelent. – spacebed

Trả lời

18

Mã này phù hợp với tôi!

Actions action = new Actions(driver); 
action.doubleClick(myElemment); 
action.perform(); 
+0

Tôi đã thử điều đó, nhưng phương thức Actions doubleClick() không kích hoạt cả hai lần nhấp đủ nhanh để đăng ký làm nhấp đúp vì một lý do nào đó .. – spacebed

+0

Vâng, tôi đã cập nhật lên bản dựng hiện tại của Selenium và (không có thay đổi về mã Bây giờ nó bắn đủ nhanh haha. Tôi sẽ đánh dấu đây là giải pháp mặc dù, như tôi nghĩ rằng các trình điều khiển hành động là cách đơn giản nhất/hiệu quả nhất để đi. – spacebed

0

bạn đã thử bắt IWebElement rồi nhấp vào hai lần chưa?

IWebElement element = driver.FindElement(By.Id("yourID")); 
element.Click(); 
element.Click(); 

Tôi không biết điều này có cung cấp cho bạn chức năng hay không nhưng tôi biết rằng khi tôi thực hiện một sự kiện nhấp như sự kiện ở trên nó chạy gần như nhấp đúp từ người dùng thực tế.

Tùy chọn khác là để tham chiếu ThoughtWorks.Selenium.Core, tuy nhiên nhược điểm duy nhất của điều này là tôi không chắc chắn nó hoạt động tốt với IWebDriver hiện tại Tôi nghĩ rằng nó cần sự khởi tạo riêng của nó là IWebDriver.

+0

Đáng buồn là điều này không hiệu quả. Tôi đã thử điều này trước AdvancedUserInteractions, nhưng dường như không thực sự thực hiện Double Click. – spacebed

2

Đây là tương đương Java. Mã này sẽ mở một cách mù quáng sự kiện đầu tiên. Bạn có thể thêm một số logic để mở một sự kiện cụ thể, vv Mã này hoạt động! (được thử nghiệm với 2.12)

List<WebElement> events = driver.findElements(By.cssSelector("div.dv-appointment")); 
for(WebElement event:events){ 
    WebElement body = event.findElement(By.cssSelector("div.body"));    
    if(!body.getText().isEmpty()) //or open a known event 
    { 
     System.out.println(body.getText()); //open the first event 
     Actions builder = new Actions(driver); 
     Action doubleClick = builder.doubleClick(event) 
            .build(); 
     doubleClick.perform(); 
     break;     
    } 
} 
1

tôi cũng đã có vấn đề nơi sự kiện DoubleClick Selenium của hoạt động trong Firefox nhưng không có tác dụng trong Chrome. Nâng cấp lên Selenium không giúp được gì; Tôi đã có phiên bản mới nhất. (Môi trường của tôi là Ubuntu 14.04, Python 2.7.6, Selenium 2.44.0, Firefox 35.0, Chrome 40.0.2214.91.)

Tôi không chắc tại sao câu trả lời của CBRRacer bị giảm giá. Tôi đã làm việc thành công xung quanh vấn đề bằng cách sử dụng hai sự kiện nhấp chuột. Điều này làm việc trong cả Firefox và Chrome. Có hai cách để làm điều đó, và cả hai đều làm việc cho tôi.

Cách thứ nhất:

elem = driver.find_element_by_css_selector('#myElement') 
elem.click() 
elem.click() 

Cách thứ hai:

elem = driver.find_element_by_css_selector('#myElement') 
actions = webdriver.ActionChains(driver) 
actions.click(elem).click(elem).perform() 
1

Tôi rất thích cách tiếp cận sử dụng ở đây, đặc biệt là xếp hàng những hành động đầu tiên, sau đó thực hiện, vì đó cho phép ứng dụng lặp đi lặp lại của actionchain.

http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.common.action_chains.ActionChains

Từ ví dụ tài liệu liên quan:

menu = driver.find_element_by_css_selector(".nav") 
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1") 

actions = ActionChains(driver) 
actions.move_to_element(menu) 
actions.click(hidden_submenu) 
actions.perform() 
Các vấn đề liên quan