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:
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.
Còn về 'browser.Eval (" alert (123) ");'? –
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? –
.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