2012-06-04 25 views
11

Tôi khá mới ở Python/JS và cũng tự động kiểm tra với Selenium/WebDriver, nhưng tôi đã thực hiện một số tiến bộ!Kịch bản Selenium/WebDriver bị gián đoạn bởi cảnh báo - ngoại lệ "Tin nhắn: u'Modal dialog hiện diện" "

Bây giờ tôi bị kẹt tại một thời điểm và nó thực sự bực bội.

Trang web tôi đang thử nghiệm bán sản phẩm. Tôi quản lý để làm cho kịch bản của tôi di chuyển một cách ngẫu nhiên và nhận được đến trang thanh toán, điền vào dữ liệu giả, gửi dữ liệu bằng cách sử dụng:

browser.execute_script("document.Form.submit(); return true;") 
browser.execute_script("processPayment(); return true;") 

Thông thường, có một toán ngay bây giờ nút và nhấp rằng kết quả yếu tố trong cùng một ngoại lệ và không có cách nào để tôi bấm OK/Hủy bỏ trên nó thông qua WebDriver (không có WebElement), nhưng tôi đã tìm ra rằng thực thi mã JS này tôi có thể vượt qua nó. Trang mới tải của tôi (sau khi gửi dữ liệu và xác nhận việc đăng tải) với xác nhận và tất cả tải dữ liệu chính xác, nhưng tập lệnh Python bị gián đoạn và tôi không thể tiếp tục thử nghiệm.

Có cách giải quyết nào cho vấn đề này không? Những gì tôi muốn nó làm là phớt lờ rằng hộp thoại modal, chờ trang xác nhận tiếp theo tải và sau đó tiếp tục định vị các yếu tố, in giá trị của họ, lưu trữ chúng, vv

Cố gắng sử dụng:

wait = ui.WebDriverWait(browser,10) 
wait.until(lambda browser: browser.title.lower().startswith('Your Receipt')) 
print(browser.title) 

nhưng tập lệnh bị gián đoạn. Xin lỗi nếu điều này đã được trả lời, nhưng tôi không thể tìm thấy nó, và tôi cũng là một newbie!

Cảm ơn trước!

EDIT:

Đã làm! Trong trường hợp của tôi, tôi đã sửa đổi mã của mình một chút

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

Lưu ý cho người mới rằng bạn sẽ cần phải nhập Cảnh báo.

from selenium.webdriver.common.alert import Alert 

Trả lời

8

Lưu ý cho người mới (như tôi) mà bạn sẽ cần phải nhập Cảnh báo.

from selenium.webdriver.common.alert import Alert 

... ... ... (code placeholder) 

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

chỉ thêm xử lý cảnh báo

+1

alert.dismiss() phương pháp làm việc cho tôi. Cảm ơn Tihomir S. –

+2

Tất nhiên lưu ý rằng alert.dismiss() nhấn nút "hủy bỏ"; sử dụng alert.accept() để nhấn "OK". –

+1

và trình duyệt trong câu trả lời là trường hợp của 'webdriver'. – Sinux

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