2009-08-17 12 views
14

Zastanawiam się, jak wyłączyć javascript podczas używania selenu, aby przetestować walidację po stronie serwera.Jak wyłączyć obsługę Javascript podczas korzystania z Selenium?

Znalazłem ten artykuł, ale nie wiem, co robić. Tak jak ja robię ten plik javascript, co wtedy?

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

+2

Napisałem ten artykuł - niestety ta metoda działa tylko wewnątrz rozszerzenia Selenium IDE w Firefoksie. Próba wyłączenia JavaScript z biegacza JavaScript Selenium (który zakładam, że twoje testy NUnit będą używane pod maską) spowodowałaby wyjątek bezpieczeństwa, więc obawiam się, że ta metoda nie jest dla ciebie użyteczna. Poniższe sugestie mfn są tym, co ogólnie uważam za te dni. – Thom

Odpowiedz

8

Inne możliwości byłoby :

  • Napisz swoją aplikację do obsługi wyłączenie JavaScript (tak, internetowej aplikacji).
    Brzmi jak szalony? Nie jest. W naszym procesie rozwoju robimy dokładnie to, wdrażając funkcje bez JS, dopóki wszystkie nie istnieją, a następnie urozmaicić JS. Zazwyczaj dostarczamy hak we wszystkich szablonach, które mogą kontrolować z jednego punktu do zasadniczo JS off/on z samej aplikacji sieciowej. I tak, aplikacja jest prawie nierozpoznawalna bez włączonego JS, ale jest to najlepszy sposób, aby upewnić się, że wszystko działa poprawnie. Piszemy nawet testy Selenium dla obu wersji; NOJS i JS. NOJS są tak szybko wdrażane, że nie mają znaczenia w porównaniu do tego, czego potrzeba, aby napisać wyrafinowane testy JS ...
  • Zmodyfikuj odpowiedni profil przeglądarki, aby JS był wyłączony. To znaczy. dla FF możesz powiedzieć Selenium, którego profilu użyć; możesz normalnie załadować ten profil, wyłączyć JS w about: config i podać profil jako profil domyślny do Selenium RC.
1

Wygląda tworzenia tego pliku daje funkcje, które trzeba wyłączyć JavaScript do testu. Przed rozpoczęciem testu wywołasz funkcję "doDisableJavascript" i funkcję "doEnableJavascript", jeśli chcesz ją ponownie włączyć.

+0

jak mam to jednak nazwać? Jak tam, skąd dzwonię? – chobo2

+1

z wywołanymi funkcjami Selenium będzie nazwą funkcji bez instrukcji np. DoDisableJavascript zostanie wywołany z selenu za pomocą polecenia DisableJavascript – AutomatedTester

4

Kroki użyć skryptu mowa powyżej nie są złe:

  1. Utwórz plik selen „user-extensions.js” jak wspomniano w artykule Ci link.
  2. Wybierz plik "user-extensions.js" w preferencjach Selenium w Opcje-> Opcje.
  3. Użyj skryptu, wybierając polecenie "Wyłącz Jawascript" lub "EnableJavascript" z listy poleceń (lub po prostu wpisz je ręcznie).

Na zrzucie ekranu przykłady kroków 2 i 3 Patrz: http://i32.tinypic.com/161mgcm.jpg

Update: Więcej informacji na temat korzystania z user-extensions.js Selen RC spróbować następujący adres URL: http://seleniumhq.org/docs/08_user_extensions.html

+0

Czy to polecenie pojawi się w nunit. Piszę wszystkie moje testy w nunit. – chobo2

+0

Tak sądzę? Nie próbowałem tego, więc nie mogę być tego pewien. Wypróbuj dokumentację dodaną do mojej odpowiedzi, aby uzyskać informacje na temat używania user-extensions.js z Selenium RC (co, jak zakładam, używasz). – coderjoe

+0

"http://i32.tinypic.com/161mgcm.jpg" gdzie jest obraz? Powinieneś mieć dodany fragment kodu. – paul

1

Próbowałem rozwiązać ten problem i znalazłem tego bloga, ale pierwszy post zawiera link, który nie jest już ważny. Ale w końcu znalazłem kod do umieszczenia w pliku user-extensions.js, który działa. Oto:

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); 
} 

Mam nadzieję, że zaoszczędzę czas potrzebny na odnalezienie.

18

Jest to sposób, aby to zrobić, jeśli używasz WebDriver z Firefoksem:

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

To nie działa z nowym selenem i firefox. Kiedyś działało wcześniej, ale nie teraz. –

0

Nie trzeba wyłączyć JavaScript. Jeśli wypełnisz formularz, możesz użyć JavaScript do przesłania formularza, np. użyj runScript i window.document.forms[0].submit().

Kiedy zadzwonisz submit() bezpośrednio na formularzu, formularz jest przesyłany bezpośrednio do serwera, nie ma onsubmit wydarzenie zwolniony, a zatem nie walidacja po stronie klienta. (O ile akcja formularza nie jest podobna do javascript:validateForm(), w takim przypadku twój system nie działa, gdy wyłączona jest obsługa JavaScript).

8

Jest to prosta odpowiedź, przynajmniej dla Pythona.

from selenium import webdriver 

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

Można wyłączyć JavaScript w czasie wykonywania za pomocą kodu:

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

Czasami profil.set_preference ("javascript.enabled", False) nie działa w przeglądarce Firefox. Użyj poniższego pytona, aby ominąć to:

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

Czy masz pojęcie, dlaczego set_preference nie działa? To jest problem, który mam i nie chcę tego obejścia, jeśli mogę to zrobić "prawidłowo". – Kiraa

+0

Niestety nie wiem –

Powiązane problemy