2014-12-19 16 views
6

tôi đã thiết lập một nền tảng thử nghiệm đơn giản cho WatiN (ver 2.1) mà đọc:Browser.ExecScript() ngừng làm việc sau khi cập nhật cửa sổ

var browser = new IE(); 

browser.GoTo("http://www.google.co.il"); // webpage doesn't matter really 
browser.RunScript("alert(123)"); 

này chỉ hoạt động nếu KB3025390 không được cài đặt. Cài đặt nó phá vỡ các thử nghiệm trên với một UnAuthorizedAccessException trong đó có HRESULT thiết lập để E_ACCESSDENIED. Đưa cái gì? Có bất kỳ công việc xung quanh?

Cập nhật: Sử dụng IWebBrowser2.Navigate2 cùng với "javascript: console.log (123)" loại kịch bản làm việc tuy nhiên

  • nó khiến tôi cảm thấy không thoải mái sử dụng như một backchannel
  • mã chạy qua kênh này của .Navigate2() chỉ có thể có độ dài tối đa khoảng 2070 ký tự (cho hoặc lấy) nếu không chúng bị cắt ngắn đến độ dài này dẫn đến lỗi javascript khi cố gắng chạy chúng
  • sử dụng .Navigate2() , ngay cả với kịch bản tầm thường nhất, sẽ làm tắc nghẽn trạng thái sẵn sàng của Internet Explorer cho tốt theo nghĩa là nó sẽ được đặt thành READYSTATE_LOADING mà không có bất kỳ hy vọng loại bỏ nó. Nói một cách đơn giản, điều này có nghĩa là khi bạn sử dụng hack này, bạn phải thực hiện mọi thao tác tiếp theo trong WatiN trong thời trang "không chờ đợi để tải trang web" (GoToNoWait, ClickNoWait, v.v.). chờ trình duyệt quay trở lại READYSTATE_COMPLETE (điều này sẽ không bao giờ xuất hiện như đã đề cập).
  • dường như có vấn đề rộng hơn nhiều ở đây theo nghĩa là tôi thậm chí không thể truy cập các thuộc tính của đối tượng IHtmlWindow2 p.e. window.document ném một ngoại lệ trái phép một lần nữa làm cho nó hầu như không thể chuyển sang thế giới C# các giá trị trả lại của các kịch bản mà tôi đang chạy (sử dụng Expando vv) cho các tài liệu khác với window.top.document (cho window.top cửa sổ .document có IWebBrowser2.Document mà hiện các trick)

cập nhật # 2: The folks qua tại dự án selen cũng đã nhận thấy vấn đề này:

https://code.google.com/p/selenium/issues/detail?id=8302

Một báo cáo lỗi đã được cũng được tạo:

https://connect.microsoft.com/IE/feedback/details/1062093/installation-of-kb3025390-breaks-out-of-process-javascript-execution-in-ie11

Cập nhật # 3: IHTMLWindow2.setInterval và IHTMLWindow2.setTimeout cũng ném ngoại lệ UnauthorizedAccess. Những phương pháp này không được đánh dấu là bị phản đối ở:

http://msdn.microsoft.com/ko-kr/library/windows/desktop/aa741505%28v=vs.85%29.aspx

nhưng họ đã bị thương lên đau khổ từ sự cắt giảm tương tự như nhau.

Update # 4: Tôi đã đưa ra cách tiếp cận đề nghị trong bài này một shot:

https://stackoverflow.com/a/18546866/863651

Để tự động gọi phương thức "eval" của đối tượng IHTMLWindow2 (hoặc bất kỳ phương pháp nào khác thực sự). Có cùng "System.UnauthorizedAccessException" như trên. Vì vậy, không có niềm vui ở đây cả.

Microsoft khuyên bạn nên sử dụng "eval" qua "execscript" tuy nhiên sau thử nghiệm trên, tôi nghi ngờ rằng họ đang đề cập đến truy cập "eval" chỉ từ bên trong trình duyệt.Theo như tôi có thể nói cho đến nay, khi nói đến chính thức IE11 + bằng cách sử dụng "eval" out-of-process (thông qua COM) dường như đã bị cấm hoàn toàn cùng với bất kỳ lời gọi hàm khác của đối tượng cửa sổ, ngoại lệ duy nhất là kênh ngược của .Navigate2() được đề cập ở trên.

+0

Còn về 'browser.Eval (" alert (123) ");'? –

+0

Tôi cũng tự hỏi liệu 'browser.GoTo (" javascript: alert (123) ")' có hoạt động không. Có lẽ nó có cái gì đó với cách cảnh báo đang được gọi? –

+0

.Eval() không thành công với cùng một HRESULT. Cách tiếp cận .GoTo() dường như hoạt động mặc dù ít nhất là trên các thử nghiệm tầm thường. Trên một lưu ý khác: Tôi không thích cài đặt bảo mật của IE trong Vùng Internet và không có gì xuất hiện trong đó. Cảm ơn đã xem xét này. – xDisruptor

Trả lời

1

Hóa ra Microsoft cuối cùng đã bị sai lệch về quyết định hủy bỏ .execScript ở cấp COM. Chỉ cần cài đặt các bản cập nhật mới nhất cho Windows bao gồm kb3025390: Một trong các bản cập nhật cho IE đến sau kb3025390 mang lại chức năng .execScript tại COM-level

Lưu ý rằng, không thể truy cập .execScript thông qua javascript của IE nữa. Trong bối cảnh đó nó đã biến mất.

1

FYI: cái này cũng không hoạt động

ieInstance.Document.Script.<methodNameString>(<commaSeperatedParameterString>) 

thử loại này làm việc cho tôi ở một số nơi nhưng không phải tất cả những nơi

ieObject.Navigate "javascript:<methodNameString>(<commaSeperatedParameterString>)", Null, "_parent" 

hoặc

ieObject.Navigate2 "javascript:"<methodNameString>(<commaSeperatedParameterString>)", Null, "_parent" 

bây giờ cố gắng để tìm ra giải pháp sử dụng eval

0

Tôi đã tìm thấy một cách xung quanh vấn đề cập nhật cài đặt tự động. Bạn chỉ có thể tạo một tệp lô đơn giản với nội dung sau.

{code} @echo off

wusa/uninstall/kb: 3.025.390/quiet/norestart

END {code}

Sau đó đi đến task scheduler , tạo một tác vụ mới cho tệp lô này để chạy mỗi một giờ hoặc một ngày theo yêu cầu của bạn. Thêm nó như là một nhiệm vụ hệ thống để nó chạy trong nền và không ảnh hưởng đến các hoạt động tự động.

+0

Cảm ơn bạn đã nỗ lực mà bạn đã đưa vào điều này. Nó sẽ là thú vị để thăm dò trong tinh thần tương tự nếu nó có thể gỡ bỏ cài đặt bản cập nhật một lần và sau đó 'ẩn' nó từ các cửa sổ cập nhật (aka thêm nó vào danh sách cập nhật không mong muốn/danh sách đen). Hai vấn đề của tôi với cách tiếp cận này là, trước tiên, cho dù cập nhật windows sẽ đủ thông minh để tự động liệt kê các cập nhật trong tương lai phụ thuộc vào bản cập nhật này và thứ hai, chuỗi cập nhật này sẽ ảnh hưởng đến bảo mật hệ thống như thế nào trong các máy khách. Chỉ cần 2c của tôi. – xDisruptor

+0

Thực ra tôi đang sử dụng Selenium (sẽ trở nên vô ích sau khi cập nhật) trên máy chủ khách hàng đi kèm theo chính sách nhóm. Vì vậy, ẩn các bản cập nhật đã không giúp tôi, cập nhật đã được cài đặt sau mỗi 72 giờ. Đó là lý do tại sao tôi tìm cách tiếp cận khác thay vì gỡ cài đặt nó sau mỗi 72 giờ. Vì vậy, tôi đã thực hiện tác vụ lên lịch đơn giản này. Về sự nghi ngờ của bạn, tôi hy vọng Internet Explorer sẽ khắc phục sự cố này vì có rất nhiều hệ thống phụ thuộc bị lỗi vì điều này, bản cập nhật cụ thể này chỉ dành cho IE vì thế không gỡ cài đặt. – NiksGr8

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