2009-08-17 12 views
14

Me pregunto cómo puedo desactivar javascript cuando uso selenio para poder probar la validación del lado del servidor.Cómo deshabilitar Javascript cuando se usa Selenium?

Encontré este artículo pero no sé qué hacer realmente. Al igual que hago este archivo javascript, ¿qué?

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

+2

Escribí ese artículo: desafortunadamente, ese método solo funciona dentro de la extensión IDE de Selenium en Firefox. Tratar de deshabilitar JavaScript desde el corredor JavaScript de Selenium (que supongo que las pruebas de NUnit se usan bajo el capó) resultaría en una excepción de seguridad, así que me temo que este método no te sirve. Las sugerencias de mfn a continuación son lo que generalmente consideraría en estos días. – Thom

Respuesta

8

Otras posibilidades serían :

  • escribir una aplicación para apoyar deshabilitar JavaScript (sí, el web aplicación).
    Suena loco? No es En nuestro proceso de desarrollo, estamos haciendo exactamente esto, implementando funciones sin JS hasta que todo esté allí, y luego damos vida a JS. Por lo general, proporcionamos un gancho dentro de todas las plantillas que puede controlar desde un solo punto hasta, básicamente, JS off/on de la aplicación web en sí. Y, sí, la aplicación apenas se reconoce sin JS habilitado, pero es la mejor manera de garantizar que todo funcione correctamente. Incluso escribimos pruebas de Selenium para ambas versiones; NOJS y JS. Los NOJS se implementan tan rápidamente que no importan en comparación con lo que se necesita para escribir pruebas sofisticadas de JS ...
  • Modifique el perfil del navegador apropiado para que JS esté desactivado. Es decir. para FF puedes decirle a Selenium qué perfil usar; puede cargar este perfil normalmente, deshabilitar JS en about: config y alimentar este perfil como perfil predeterminado a Selenium RC.
1

Parece que la creación de este archivo le dará las funciones que usted necesita para desactivar Javascript para su prueba. Llamarás a la función "doDisableJavascript" antes de comenzar la prueba y a la función "doEnableJavascript" cuando quieras habilitarla nuevamente.

+0

¿cómo lo llamo así? ¿Como de dónde lo estoy llamando? – chobo2

+1

con las funciones de llamada de Selenium que usted creó sería el nombre de la función sin el do, por ejemplo, doDisableJavascript sería llamado desde el selenio con el comando DisableJavascript – AutomatedTester

4

Los pasos para utilizar la secuencia de comandos que se hace referencia más arriba no son de mala:

  1. Crear el archivo de selenio "User-extensions.js" como se menciona en el artículo que enlace.
  2. Seleccione su archivo "user-extensions.js" en las preferencias de Selenium en Opciones-> Opciones.
  3. Utilice la secuencia de comandos seleccionando el comando "DisableJavascript" o "EnableJavascript" en la lista de comandos (o simplemente escríbalo manualmente).

imagen de las cámaras Para ejemplos de los pasos 2 y 3, véase: http://i32.tinypic.com/161mgcm.jpg

actualización: Para obtener información sobre el uso de usuarios-extensions.js con selenio RC intente la siguiente URL: http://seleniumhq.org/docs/08_user_extensions.html

+0

Este comando aparecerá en nunit. Escribo todas mis pruebas en nunit. – chobo2

+0

Creo que sí? No lo he probado, así que no puedo estar seguro. Pruebe la documentación que agregué a mi respuesta para obtener información sobre el uso de user-extensions.js con Selenium RC (que supongo que está usando). – coderjoe

+0

"http://i32.tinypic.com/161mgcm.jpg" ¿dónde está la imagen? Deberías haber agregado un fragmento de código. – paul

1

Estaba tratando de resolver este problema y encontré este blog pero la primera publicación tiene un enlace que ya no es válido. Pero finalmente encontré el código para colocar dentro de user-extensions.js que funciona. Aquí está:

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

Espero que esto ahorre el tiempo que me llevó encontrarlo.

18

Esta es una manera de hacerlo si utiliza WebDriver con FireFox:

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

Esto no funciona con selenio nuevo y firefox. Solía ​​trabajar antes, pero ahora no. –

0

No es necesario desactivar JavaScript. Si completa su formulario, puede usar JavaScript para enviar su formulario, p. use runScript y window.document.forms[0].submit().

Siempre que llame submit() directamente en un formulario, el formulario se envía directamente al servidor, no hay ningún evento onsubmit despedido, y por lo tanto, ninguna validación del lado del cliente. (A menos que su acción de formulario sea algo así como javascript:validateForm(), en cuyo caso su sistema no funciona cuando JavaScript está deshabilitado).

8

Esta es la respuesta simple, al menos para Python.

from selenium import webdriver 

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

puede deshabilitar el JavaScript durante el tiempo de ejecución utilizando el código:

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

Establecer el nombre del navegador en la configuración de selenio a htmlunit.

Este es un controlador que tiene JavaScript deshabilitado por defecto https://code.google.com/p/selenium/wiki/HtmlUnitDriver. El JavaScript requerido para que el selenio interactúe con la página aún podrá ejecutarse.

1

A veces, profile.set_preference ("javascript.enabled", False) no funciona en Firefox. Use el siguiente pitón para evitar esto:

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

¿Tiene alguna idea de por qué la set_preference no funciona? Es un problema que tengo y no quiero usar esta solución alternativa si puedo hacerlo 'correctamente'. – Kiraa

+0

Lo siento no sé –

Cuestiones relacionadas