2011-09-08 15 views
11

Im haciendo webtest usando Selenium Webdriver en C#. Pero estoy teniendo un problema donde cuando la ventana del navegador no está en tamaño completo, una ventana emergente se abrirá a mitad de camino fuera del área visible.¿Cómo enfocar un elemento de la manera correcta?

El problema es que cuando disparo un .Click(); no hace nada porque el enlace que intento hacer clic está fuera del área vista.

Entonces, ¿cómo me concentro en el enlace para hacer clic para trabajar? Actualmente estoy usando la siguiente solución, pero no creo que sea una buena manera.

sendkeys con espacio se centra en el enlace y hace que Click funcione siempre, pero ¿no hay una forma correcta de hacerlo?

Respuesta

15

Hemos estado jugando con Selenium y hemos tenido este problema también. No sé si es la WebDriver en su conjunto, el C# aplicación, la versión de Firefox, etc, pero hemos encontrado una solución aceptable:

El truco es obligar selenio para evaluar la propiedad LocationOnScreenOnceScrolledIntoView en la clase RemoteWebElement (que se hereda por FirefoxWebElement e implementa IWebElement). Esto obliga al navegador a desplazarse para que el elemento esté a la vista.

La forma en que lo hemos hecho es utilizar un método de extensión:

using OpenQA.Selenium; 
using OpenQA.Selenium.Remote; 

namespace Namespace 
{ 
    public static class ExtensionMethods 
    { 
     public static IWebElement FindElementOnPage(this IWebDriver webDriver, By by) 
     { 
      RemoteWebElement element = (RemoteWebElement)webDriver.FindElement(by); 
      var hack = element.LocationOnScreenOnceScrolledIntoView; 
      return element; 
     } 
    } 
} 

esta manera todo lo que tenemos que hacer es cambiar el código generado a partir de:

driver.FindElement(By.Id("elementId")).Click(); 

a:

driver.FindElementOnPage(By.Id("elementId")).Click(); 

Espero que te sirva?

+0

Enfriar gracias, voy a probar el lunes :) ,, Se ve mejor que mi solución;) –

+0

Funcionó como un encanto. Gracias por el aporte –

1

En lugar de enviar la clave para el valor en blanco, envíela por espacio. Ese es el atajo de teclado para seleccionar una casilla de verificación.

basta con sustituir el código:

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(""); 
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click(); 

por

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(Keys.Space); 
0

driver.find_element(:id, "edit-section").send_keys " " con el espacio que funcionó para mí.

Estoy usando webdriver rspec con selenium-server-2.24.1 y estaba teniendo problemas con IE8 - Seguí recibiendo Selenium::WebDriver::Error::ElementNotVisibleError. Estaba trabajando en IE9 y FF pero no en IE8 hasta que agregué send_keys "".

Cuestiones relacionadas