2012-01-03 31 views
7

(He mirado en muchos otros mensajes similares en el SO y por desgracia no he podido resolver este problema, así que aquí va ...)selenio WebDriver Click() falla con IE9

estoy usando selenio WebDriver (implementación de C#, versión 2.15) para conducir una página web bastante simple. La página contiene un formulario con dos entradas <> para nombre de usuario y contraseña, y una entrada <> para enviar el formulario. Puedo ingresar correctamente los valores para nombre de usuario y contraseña, pero la llamada Click() en el botón enviar parece no tener ningún efecto.

por otras recomendaciones, que han tratado los siguientes trucos, ninguno de los cuales ha trabajado:

  • ventana Cambio de enfoque para currentWindowHandle
  • Haga clic en el elemento principal del elemento, a continuación, en el elemento
  • Añadir una larga espera implícita
  • Añadir una larga espera explícita (por dormir 20 segundos)
  • Haga clic en un montón de veces en el elemento
  • Uso Presentar() en lugar de Click()
  • enviar las claves "\ n" al elemento (informes de selenio esto como un error)

Tenga en cuenta que he verificado que el botón < de entrada> es efectivamente encontrado con éxito, por lo que no parece ser un problema.

Además, tenga en cuenta que he verificado que el botón sí funciona fuera de Selenium-land. Es decir, puedo navegar hasta el sitio, ingresar las credenciales de inicio de sesión y hacer clic en el botón Enviar (¡y funciona!).

Además, tenga en cuenta que este problema está en IE. No me ocurre con Chrome y FF7.

Dicho eso, ¿alguien tiene alguna otra idea?

Respuesta

5

¿Está su sitio públicamente disponible para la prueba? ¿Es su IE zoom level al 100%? Es un requisito para los eventos de clic nativos para trabajar desde la documentación de nivel de zoom here

El navegador debe estar configurado al 100% para que los eventos de ratón nativa se pueden ajustar a las coordenadas correctas.

Si esto no funciona, parece un error en el controlador de la web. Debería abrir un problema here.

Habiendo dicho esto, probablemente podría utilizar la ruta del script de Java mientras tanto como una solución temporal. Algo como,

driver.navigate().to("javascript:document.getElementById('yoursubmitbutton').click()"); 
+0

¿Cómo puedo establecer el nivel de zoom de IE? –

+0

Sí, de hecho es el nivel de zoom. ¡Gracias! Aunque realmente necesito una forma de detectar y/o configurar el nivel de zoom mediante programación. No puedo permitir que mis pruebas fallen todo el tiempo ... –

2

Parece que puede haber un problema con donde se produce el clic del mouse. Intenté usar el mecanismo de acciones en Selenium para forzar un clic de mouse con un poco de un desplazamiento. Hace clic con éxito en el elemento:

new Actions(GuiOps.driver).MoveToElement(e).MoveByOffset(5,5).ClickAndHold().Release().Perform(); 
1

Tuve este problema.No puedo recordar el post donde he encontrado la solución, pero me pareció que los siguientes trabajó para mí:

en un botón:

var navButton = driver.FindElement(By.Id("NavButton")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", navButton); 

funciona todo el tiempo.

También estaba teniendo problemas para enviar el evento click a una fila de la tabla. A veces, el .Click() enviaría el evento a la fila de arriba (tenemos una estructura de tabla horriblemente complicada que tiene un botón de radio oculto dentro de la cual tampoco se puede hacer clic con Selenium). El truco anterior no funcionaría con las celdas a las que se podía acceder a través de FindElement.

Al final, lo único que funcionó fue seleccionar la imagen dentro de esa fila y enviar el clic a eso.

var img = driver.FindElement(By.Id("fim{4C3DE9FA-45B0-40E0-BD95-9EE0374EA38A}")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", img); 

Espero que ayude.

-1

Una solución más posible puede ser como la repetición de clic como:

Btn.click(); 
Btn.click(); 

Debido a que primero solo clic ajustar el enfoque y segundo uno realiza la verdadera clic. Funcionó para mí

+2

El problema con esto es que si prueba con múltiples navegadores, el primer clic realizará una acción, y el segundo clic arrojará una excepción porque no puede encontrar el elemento. – boolean

1

Veo una solución múltiple aquí, pero pensé que iba a compartir lo que funcionó para mí en caso de que alguien más necesitara un enfoque diferente. Tenía un problema similar, para mí la solución era tan simple como hacer clic en el uso de un método diferente

Por ejemplo

btn.Sendkeys(Keys.Enter); 
0

Uso FindElement(By.CSSSelector("'CSSPath'")); Si tiene alguna CSS aplicada al botón, es más consistente, alternativamente, escriba otras declaraciones múltiples para encontrar el elemento con medios alternativos, como ID, etiqueta o similar con el WebDriverWait Método

0

Puede ser necesario configurar Activar eventos nativos para "verdadero" cuando lo ejecuta en IE y si desea ejecutar el mismo código en FF y Chrome, entonces debe habilitar los Eventos nativos como "verdaderos" en esos navegadores también.

Puede hacerlo al configurar el navegador en el que desea ejecutar.

0

código try -

driver.FindElement(By.Id("btn")).sendkeys("\n"); 
0

probar este ..
WebElement hiddenWebElement = d.findElement (By.xpath (XPath));
((JavascriptExecutor) d) .executeScript ("argumentos [0] .click()", hiddenWebElement);

0

A continuación trabajó para mí:

@FindBy(id = "submit_action") 
WebElement submitButton_; 
... 
public void clickSubmit() { 

    if (driver_ instanceof InternetExplorerDriver) { 
     ((JavascriptExecutor) driver_).executeScript("arguments[0].fireEvent('onclick');", submitButton_); 
    } 
    else { 
     submitButton_.click(); 
    } 
} 

Como fireEvent solamente es soportado por el IE por lo tanto, la alternativa.

Cuestiones relacionadas