2012-11-13 25 views
5

Tôi mới dùng Ruby và Watir-Webdriver. Tôi có một bộ tự động hóa cho trang web của chúng tôi được viết bằng VBScript và tôi muốn chuyển đổi nó sang Ruby/Watir bởi vì bây giờ tôi phải hỗ trợ Firefox. Tôi đã tìm thấy tôi thực sự thích Ruby, và tôi đang làm việc trên Watir, nhưng tôi đã dành một tuần bây giờ cố gắng để có được Webdriver thậm chí hiển thị màn hình đăng nhập của tôi.Watir-Webdriver có hỗ trợ nhấp vào liên kết nơi đích đến là javascript không?

Trang web bắt đầu bằng "Màn hình cảnh báo" có khu vực "Tôi đồng ý". Người dùng nhấp vào Tôi đồng ý và được trình bày với màn hình đăng nhập.

<body onload="showMessage('true')"><div id="login"><div id="message"><map name="accept"> 

<area href="javascript:showLogin();" shape="rect" coords="280,390,384,432" /> 

</map></div></div></body> 

Tôi cần nhấp vào khu vực để trình bày màn hình đăng nhập (cùng trang, biểu mẫu thực sự, chỉ ẩn). Tôi làm điều này cả ngày với VBScript:

objExplorer.Document.GetElementsByTagName("area")(0).click 

Tuy nhiên, sử dụng Watir-Webdriver, browser.area (: index, 0) .click không làm gì cả.

puts browser.area(:index, 0).shape 
=>RECT 

puts browser.area(:index, 0).coords 
=>280,390,384,432 

Vì vậy, tôi biết tập lệnh có thể "xem" phần tử khu vực và đọc thuộc tính của nó. Nó chỉ không làm bất cứ điều gì với sự kiện click.

Nếu tôi sử dụng một browser.goto trên href bản thân:

browser.goto("javascript:showLogin();") 

đăng nhập trở nên rõ ràng, nhưng tôi không thể tương tác với các yếu tố (thiết lập các lĩnh vực văn bản cho tên người dùng và mật khẩu). Tôi đang xem trang có cửa sổ công cụ dành cho nhà phát triển đang mở (để xem HTML) và nó chỉ hiển thị "Đang tải ...".

Đây là nơi tôi bị kẹt. Thật thú vị, nếu tôi sử dụng tên của biểu mẫu đăng nhập và thực hiện:

browser.form(:name, "LoginForm").submit 

Tôi nhận được thông báo bật lên từ biểu mẫu tên người dùng và mật khẩu trống, vì vậy vẫn còn một số tương tác.

Tất nhiên, nếu tôi nhập tên người dùng/mật khẩu theo cách thủ công, tôi có thể gửi biểu mẫu phạt ngay cả khi thông báo "Đang tải ...".

Tôi hiểu "when_present.click" và các kỹ thuật khác để chờ trình duyệt; những thứ này không hiệu quả. Tình trạng khó xử của tôi là tôi không thể nhấp vào khu vực, và nếu tôi sử dụng goto trên javascript, trình duyệt sẽ bỏ qua việc tự động hóa từ Watir.

Cảm ơn sự giúp đỡ của bạn. Ngay cả một câu trả lời của "Xin lỗi, Watir hoặc Webdriver sẽ không làm điều này" là chấp nhận được với tôi. Nó sẽ cho phép tôi tiếp tục và tìm kiếm các giải pháp khác.

Chỉnh sửa sau khi câu hỏi trong ý kiến:

Xin lỗi, trang web này là không được công khai, vì vậy tôi không thể đăng một liên kết. Đối với làm việc trong Firefox, kịch bản hoạt động tốt. IE đang gặp sự cố. Các nhận xét khiến tôi suy nghĩ: Tôi nhận được chứng chỉ "... không được cấp bởi đáng tin cậy ..." khi lần đầu tiên điều hướng đến trang web. Có thể lỗi chứng chỉ tôi nhận được trong IE gây ra một số loại ngắt kết nối với tự động hóa trước khi trình bày biểu mẫu? Tôi sử dụng một dòng tôi đã ở đây trên stackoverflow bấm quá khứ lỗi cert:

browser.goto("javascript:document.getElementById('overridelink').click()") 

Nhưng bây giờ tôi nghĩ rằng có lẽ đây có thể là một phần của vấn đề. Tôi đã đi đến IE của tôi (sử dụng IE 9) tùy chọn và bỏ chọn các tùy chọn bảo mật để kiểm tra certs, nhưng vô ích.Nếu điều này có thể gây ra vấn đề, tôi sẽ phải thương lượng với nhóm cơ sở hạ tầng để tạo chứng chỉ để chúng tôi tải xuống mỗi lần họ tạo máy chủ mới.

+0

Trang web có công khai không? Liên kết với nó sẽ giúp ích. –

+1

Dường như nó được hỗ trợ. Sử dụng Watir-Webdriver, nhấp vào một vùng có 'href =" javascript: alert ('test'); "' đã tạo cảnh báo như mong đợi. Có lẽ bạn đang gặp một số vấn đề tương thích với trình duyệt? Ví dụ, 'href =" javascript: alert(); "' (lưu ý tham số không được chuyển tới alert()), trong IE sẽ hiển thị cảnh báo mà không có thông báo ở đâu trong Firefox nó sẽ không làm gì cả. Việc nhấp vào vùng có hoạt động thủ công như mong đợi trong Firefox không? –

Trả lời

6

Ok, tôi đoán sau khi đọc hàng trăm bài đăng và giờ tìm kiếm trên Google, cuối cùng tôi đã tìm thấy giải pháp cho vấn đề của mình: browser.execute_script.

browser.execute_script("showLogin();") 

Thật đơn giản. Sử dụng browser.goto treo khi tải trang và trình quản trị web hết thời gian chờ. Sử dụng execute_script hoạt động hoàn hảo!

+0

Đẹp! Tôi đang tìm kiếm một cái gì đó như thế này. Cảm ơn bạn đã đăng giải pháp của mình, tôi không biết về '.execute_script'. –

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