2009-08-17 5 views
14

Je me demande comment désactiver javascript lors de l'utilisation de sélénium afin que je puisse tester la validation côté serveur.Comment désactiver Javascript pour l'utilisation de Selenium?

J'ai trouvé cet article mais je ne sais pas quoi faire vraiment. Comme je fais ce fichier javascript alors quoi?

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

+2

J'ai écrit cet article - malheureusement, cette méthode ne fonctionne que dans l'extension Selenium IDE dans Firefox. Essayer de désactiver JavaScript à partir du coureur JavaScript Selenium (que vos tests NUnit utilisent sous le capot) résulterait en une exception de sécurité, donc je crains que cette méthode ne vous soit pas utile. Les suggestions de NPF ci-dessous sont ce que je considère généralement ces jours-ci. – Thom

Répondre

8

D'autres possibilités seraient :

  • Écrivez votre application pour soutenir la désactivation de JavaScript (oui, l'application Web).
    Ça a l'air fou? N'est pas. Dans notre processus de développement, nous faisons exactement cela, en mettant en œuvre des fonctionnalités sans JS jusqu'à ce que tous soient là, puis pimenter avec JS. Nous fournissons généralement un crochet dans tous les modèles qui peuvent contrôler à partir d'un seul point de savoir quel JS off/on de l'application Web elle-même. Et, oui, l'application est difficilement reconnaissable sans JS activé, mais c'est la meilleure façon de s'assurer que tout fonctionne correctement. Nous écrivons même des tests de sélénium, pour les deux versions; NOJS et JS. Les NOJS sont si rapidement implémentés qu'ils n'ont pas d'importance par rapport à ce qu'il faut pour écrire des tests JS sophistiqués ...
  • Modifiez le profil de navigateur approprié pour désactiver JS. C'est à dire. pour FF, vous pouvez dire à Selenium quel profil utiliser; vous pouvez charger ce profil normalement, désactivez JS dans environ: config et alimentez ce profil en tant que profil par défaut à Selenium RC.
1

Il ressemble à la création de ce fichier vous donnera les fonctions que vous devez désactiver javascript pour votre test. Vous appelez la fonction "doDisableJavascript" avant de commencer le test et la fonction "doEnableJavascript" lorsque vous souhaitez l'activer à nouveau.

+0

comment puis-je l'appeler si? Comme d'où je l'appelle? – chobo2

+1

avec les fonctions d'appel Selenium que vous avez créées serait le nom de la fonction sans le faire, par exemple, doDisableJavascript serait appelé depuis Selenium avec la commande DisableJavascript – AutomatedTester

4

Les étapes pour utiliser le script référencé ci-dessus ne sont pas mauvais:

  1. Créer le sélénium fichier « -extensions.js utilisateur » comme mentionné dans l'article que vous liez.
  2. Sélectionnez votre fichier "user-extensions.js" dans les préférences du sélénium dans Options-> Options.
  3. Utilisez le script en sélectionnant la commande "DisableJavascript" ou "EnableJavascript" dans la liste des commandes (ou tapez-le manuellement).

Pour des exemples de capture d'écran les étapes 2 et 3, voir: http://i32.tinypic.com/161mgcm.jpg

Mise à jour: Pour plus d'informations sur l'utilisation de l'utilisateur-extensions.js avec Selenium RC essayez l'URL suivante: http://seleniumhq.org/docs/08_user_extensions.html

+0

Cette commande apparaîtra-t-elle dans nunit. J'écris tous mes tests en nunit. – chobo2

+0

Je crois? Je n'ai pas essayé, donc je ne peux pas être sûr. Essayez la documentation que j'ai ajoutée à ma réponse pour plus d'informations sur l'utilisation de user-extensions.js avec Selenium RC (que je suppose que vous utilisez). – coderjoe

+0

"http://i32.tinypic.com/161mgcm.jpg" où est l'image? Vous devriez avoir ajouté un extrait de code. – paul

1

J'essayais de résoudre ce problème et j'ai trouvé ce blog mais le premier message a un lien qui n'est plus valide. Mais j'ai finalement trouvé le code à placer à l'intérieur de l'utilisateur-extensions.js qui fonctionne. Le voici:

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

J'espère que cela m'a permis de gagner du temps.

18

C'est une façon de le faire si vous utilisez WebDriver avec FireFox:

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

Cela ne fonctionne pas avec le nouveau sélenium et firefox. Il a l'habitude de travailler plus tôt, mais pas maintenant. –

0

Vous n'avez pas besoin de désactiver JavaScript. Si vous remplissez votre formulaire, vous pouvez utiliser JavaScript pour envoyer votre formulaire, par exemple. utiliser runScript et window.document.forms[0].submit().

Chaque fois que vous appelez submit() directement sur un formulaire, le formulaire est transmis directement au serveur, il n'y a aucun événement onsubmit a tiré, et par conséquent, aucune validation côté client. (À moins que votre action de formulaire ne ressemble à javascript:validateForm(), auquel cas votre système ne fonctionne pas lorsque JavaScript est désactivé).

8

C'est la réponse simple, pour Python au moins.

from selenium import webdriver 

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

Vous pouvez désactiver le JavaScript lors de l'exécution en utilisant le code:

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

Définissez le nom du navigateur dans les paramètres du sélénium à htmlunit.

Ceci est un pilote qui a désactivé JavaScript par défaut https://code.google.com/p/selenium/wiki/HtmlUnitDriver. Le JavaScript requis pour que le sélénium interagisse avec la page pourra toujours être exécuté.

1

Parfois, profile.set_preference ("javascript.enabled", False) ne fonctionne pas dans Firefox. Utilisez le python ci-dessous pour contourner cela:

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

Avez-vous une idée de la raison pour laquelle set_preference ne fonctionne pas? C'est un problème que je rencontre et je ne veux pas utiliser cette solution de contournement si je peux le faire correctement. – Kiraa

+0

Désolé ne sait pas –

Questions connexes