2013-01-24 39 views
13

Thực hiện theo các phần dưới đây của mã:Làm cách nào để làm mới trang trên trình duyệt bằng selenium-webdriver?

driver.get "https://example.com/" 

element = driver.find_element :name => "username" 
element.send_keys "*****" 
element = driver.find_element :name => "password" 
element.send_keys "*****" 
element.submit 

Bây giờ Vấn đề là khi driver mở URL trên trình duyệt, Một số lần trang tiếp theo mà tên truy cập và mật khẩu đã được đặt bởi các kịch bản, không đến - điều này khiến cho tập lệnh thất bại. Một số trang trung gian đang đến yêu cầu chúng tôi nhấp vào 'thử lại nút' hoặc 'làm mới trang '. Vì vậy, kịch bản bất cứ khi nào trường hợp như vậy xảy ra ngừng thực hiện, như không nhận được yếu tố được đề cập.

Vì vậy, có cách nào để làm mới trang trung gian đó bằng "ngủ" trước khi truy cập trang "Đăng nhập" để tập lệnh có thể chạy trong một lần không?

+4

'page.driver.browser.navigate.refresh' nếu sử dụng Capybara – Nakilon

+3

Đối Capybara , Tôi thấy 'visit current_path' hoạt động tốt hơn. – Tommyixi

Trả lời

11

Bạn có thể sử dụng phương pháp Navigation#refresh:

driver.navigate.refresh 
+0

lệnh 'điều hướng' làm gì? tại sao không chỉ 'driver.refresh'? – CodeLover

+0

'điều hướng' cung cấp cho bạn quyền truy cập vào các phương thức điều hướng; tương tự như cách bạn sẽ làm 'driver.navigate.to'. Tại sao không chỉ 'driver.refresh' - đó là một câu hỏi cho các nhà phát triển của các ràng buộc ruby ​​(tức là nó chỉ là một sở thích về thiết kế api). –

+1

nhận 'biến không xác định cục bộ hoặc phương pháp' trình điều khiển 'cho # ' –

1

Chỉnh sửa: câu trả lời ban đầu của tôi cho rằng Capybara đã được sử dụng.

Bạn chỉ có thể sử dụng driver.get trên trang một lần nữa để làm mới. Không có sự khác biệt giữa việc nhấp vào nút làm mới trong trình duyệt và nhập cùng một URL để tải lại trang, vì vậy driver.get là đủ cho hành vi này.

4

Trong những trường hợp như thế này, tôi đã viết một số mã để kiểm tra sự tồn tại của lĩnh vực đầu vào. Nếu nó không tồn tại, sau đó làm mới.

driver.refresh() 
+0

Tôi không tin rằng điều này làm việc cho các ràng buộc ruby ​​(mặc dù nó có thể làm việc cho một số các ràng buộc khác). –

8

Đối Capybara, tôi khuyên bạn nên

page.evaluate_script("window.location.reload()") 

này cũng làm việc với poltergeist/phantomjs

10

Như đã đề cập trong một chú thích bởi @Nakilon, với phi Poltergeist trình điều khiển trong Capybara sử dụng như sau để làm mới trang hiện tại:

page.driver.browser.navigate.refresh 

Nhưng đối với một sửa chữa phổ biến, sử dụng:

page.evaluate_script 'window.location.reload()' 
Các vấn đề liên quan