2009-08-17 29 views
14

Tôi tự hỏi làm cách nào để tắt javascript khi sử dụng selen để tôi có thể kiểm tra xác thực phía máy chủ.Làm thế nào để tắt Javascript khi sử dụng Selenium?

Tôi đã tìm thấy bài viết này nhưng tôi không biết phải làm gì. Giống như tôi làm cho tập tin javascript sau đó những gì?

http://thom.org.uk/2006/03/12/disabling-javascript-from-selenium/

+2

Tôi đã viết bài này - không may, phương pháp đó chỉ hoạt động bên trong phần mở rộng Selenium IDE trong Firefox. Cố gắng vô hiệu hóa JavaScript từ trình biên dịch JavaScript Selenium (mà tôi cho rằng các thử nghiệm NUnit của bạn sử dụng dưới mui xe) sẽ dẫn đến một ngoại lệ bảo mật, vì vậy tôi sợ phương pháp này không được sử dụng cho bạn. đề xuất của mfn dưới đây là những gì tôi thường xem xét những ngày này. – Thom

Trả lời

8

khả năng khác sẽ là :

  • Viết ứng dụng của bạn để hỗ trợ vô hiệu JavaScript (có, web ứng dụng).
    Nghe có vẻ điên khùng? Không phải. Trong quá trình phát triển của chúng tôi, chúng tôi đang làm chính xác điều này, thực hiện các tính năng mà không cần JS cho đến khi tất cả đều có, sau đó thêm gia vị với JS. Chúng tôi thường cung cấp một móc trong tất cả các mẫu có thể kiểm soát từ một điểm duy nhất về cơ bản mà JS tắt/bật từ chính ứng dụng web. Và, vâng, ứng dụng hầu như không thể nhận ra mà không có JS được kích hoạt, nhưng đó là cách tốt nhất để đảm bảo mọi thứ hoạt động bình thường. Chúng tôi thậm chí còn viết các bài kiểm tra Selenium cho cả hai phiên bản; NOJS và JS. NOJS được triển khai nhanh đến mức chúng không quan trọng so với những gì cần để viết các bài kiểm tra JS tinh vi ...
  • Sửa đổi cấu hình trình duyệt thích hợp để tắt JS. I E. cho FF bạn có thể cho Selenium biết profile nào cần sử dụng; bạn có thể tải hồ sơ này bình thường, vô hiệu hóa JS trong about: config và nạp profile này làm profile mặc định cho Selenium RC.
1

Dường như tạo tập tin này sẽ cung cấp cho bạn các chức năng mà bạn cần phải vô hiệu hóa javascript cho thử nghiệm của bạn. Bạn sẽ gọi hàm "doDisableJavascript" trước khi bắt đầu thử nghiệm và chức năng "doEnableJavascript" khi bạn muốn bật lại chức năng này.

+0

Tôi có thể gọi nó bằng cách nào? Như tôi đang gọi nó từ đâu vậy? – chobo2

+1

với các chức năng gọi Selenium mà bạn đã tạo sẽ là tên của hàm mà không có ví dụ doDisableJavascript sẽ được gọi từ selen với lệnh DisableJavascript – AutomatedTester

4

Các bước để sử dụng kịch bản tham chiếu ở trên là không xấu:

  1. Tạo selen "user-extensions.js" tập tin như đã đề cập trong bài viết bạn liên kết.
  2. Chọn tệp "user-extensions.js" trong tùy chọn Selenium trong Tùy chọn-> Tùy chọn.
  3. Sử dụng tập lệnh bằng cách chọn lệnh "DisableJavascript" hoặc "EnableJavascript" từ danh sách lệnh (hoặc chỉ cần nhập thủ công).

Đối với màn hình bắn ví dụ về các bước 2 và 3 see: http://i32.tinypic.com/161mgcm.jpg

Cập nhật: Để biết thông tin về việc sử dụng người dùng extensions.js với Selenium RC thử URL sau: http://seleniumhq.org/docs/08_user_extensions.html

+0

Lệnh này sẽ hiển thị trong nunit. Tôi viết tất cả các bài kiểm tra của tôi trong nunit. – chobo2

+0

Tôi tin như vậy? Tôi đã không thử nó vì vậy tôi không thể chắc chắn. Hãy thử tài liệu tôi đã thêm vào câu trả lời của tôi để biết thông tin về cách sử dụng user-extensions.js với Selenium RC (mà tôi cho rằng bạn đang sử dụng). – coderjoe

+0

"http://i32.tinypic.com/161mgcm.jpg" hình ảnh ở đâu? Bạn nên thêm đoạn mã. – paul

1

Tôi đã cố gắng giải quyết vấn đề này và tìm thấy blog này nhưng bài đăng đầu tiên có liên kết không còn hợp lệ. Nhưng cuối cùng tôi đã tìm thấy mã để đặt bên trong người dùng-extensions.js hoạt động. Dưới đây là:

Selenium.prototype.doDisableJavascript = function() { 
    setJavascriptPref(false); 
}; 

Selenium.prototype.doEnableJavascript = function() { 
    setJavascriptPref(true); 
}; 

function setJavascriptPref(bool) { 
    prefs = Components.classes["@mozilla.org/preferences-service;1"] 
      .getService(Components.interfaces.nsIPrefBranch); 
    prefs.setBoolPref("javascript.enabled", bool); 
} 

Hy vọng điều này sẽ giúp tôi tiết kiệm thời gian tìm nó.

18

Đây là một cách để làm điều đó nếu bạn sử dụng WebDriver với FireFox:

FirefoxProfile p = new FirefoxProfile(); 
p.setPreference("javascript.enabled", false); 
driver = new FirefoxDriver(p); 
+0

Điều này không hoạt động với selen và firefox mới. Nó được sử dụng để làm việc trước đó, nhưng không phải bây giờ. –

0

Bạn không cần phải vô hiệu hóa JavaScript. Nếu bạn điền vào biểu mẫu của mình, bạn có thể sử dụng JavaScript để gửi biểu mẫu của mình, ví dụ: sử dụng runScriptwindow.document.forms[0].submit().

Bất cứ khi nào bạn gọi submit() trực tiếp trên biểu mẫu, biểu mẫu được gửi trực tiếp tới máy chủ, không có sự kiện nào được kích hoạt onsubmit và do đó không có xác thực phía máy khách. (Trừ khi hành động biểu mẫu của bạn là một cái gì đó như javascript:validateForm(), trong trường hợp đó hệ thống của bạn không hoạt động khi JavaScript bị tắt).

8

Đây là câu trả lời đơn giản, cho python ít nhất.

from selenium import webdriver 

profile = webdriver.FirefoxProfile() 
profile.set_preference("javascript.enabled", False); 
driver = webdriver.Firefox(profile) 
0

Bạn có thể vô hiệu hóa JavaScript trong thời gian chạy bằng cách sử dụng mã:

WebDriver driver = new FirefoxDriver(); 
driver.get("about:config"); 
Actions act = new Actions(driver); 
act.sendKeys(Keys.RETURN).sendKeys("javascript.enabled").perform(); 
Thread.sleep(1000); 
act.sendKeys(Keys.TAB).sendKeys(Keys.RETURN).sendKeys(Keys.F5).perform(); 
1

Đặt tên trình duyệt trong các thiết lập selen để htmlunit.

Đây là trình điều khiển đã tắt JavaScript theo mặc định https://code.google.com/p/selenium/wiki/HtmlUnitDriver. JavaScript cần thiết cho selen để tương tác với trang sẽ vẫn có thể chạy.

1

Đôi khi, profile.set_preference ("javascript.enabled", False) không hoạt động trong Firefox. Sử dụng con trăn dưới đây để giải quyết vấn đề này:

from pyvirtualdisplay import Display 
from selenium import webdriver 
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.action_chains import ActionChains 


profile = webdriver.FirefoxProfile() 
profile.update_preferences() #May or may not be needed 

display = Display(visible=0, size=(1200, 800)) 
display.start() 

browser = webdriver.Firefox(profile) 
browser.get("about:config") 
actions = ActionChains(browser) 
actions.send_keys(Keys.RETURN) 
actions.send_keys("javascript.enabled") 
actions.perform() 
actions.send_keys(Keys.TAB) 
actions.send_keys(Keys.RETURN) 
actions.send_keys(Keys.F5) 
actions.perform() 

browser.quit() 
display.stop() 
+0

Bạn có biết tại sao set_preference không hoạt động? Đó là một vấn đề tôi gặp phải và tôi không muốn sử dụng cách giải quyết này nếu tôi có thể làm điều đó 'đúng'. – Kiraa

+0

Xin lỗi không biết –

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