Posterior a de nuestra extensa recopilación de información pudimos solucionar este atasco que pueden tener ciertos los usuarios. Te ofrecemos la respuesta y deseamos que te resulte de mucha ayuda.
Solución:
Ejecutar un clic a través de JavaScript tiene algunos comportamientos que debe tener en cuenta. Si, por ejemplo, el código vinculado a la onclick
evento de su elemento invoca window.alert()
, es posible que su código de Selenium se cuelgue, dependiendo de la implementación del controlador del navegador. Dicho esto, puedes usar el JavascriptExecutor
clase para hacer esto. Sin embargo, mi solución difiere de otras propuestas en que aún puede usar los métodos de WebDriver para ubicar los elementos.
// Assume driver is a valid WebDriver instance that
// has been properly instantiated elsewhere.
WebElement element = driver.findElement(By.id("gbqfd"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
También debe tener en cuenta que es mejor que utilice el click()
metodo de la WebElement
interfaz, pero deshabilitando los eventos nativos antes de crear una instancia de su controlador. Esto lograría el mismo objetivo (con las mismas limitaciones potenciales), pero no lo obligaría a escribir y mantener su propio JavaScript.
Aquí está el código que usa JavaScript para hacer clic en el botón en WebDriver:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");
Sé que esto no es JavaScript, pero también puede usar físicamente el clic del mouse para hacer clic en un ancla dinámica de Javascript:
public static void mouseClickByLocator( String cssLocator )
String locator = cssLocator;
WebElement el = driver.findElement( By.cssSelector( locator ) );
Actions builder = new Actions(driver);
builder.moveToElement( el ).click( el );
builder.perform();
valoraciones y comentarios
Te invitamos a añadir valor a nuestro contenido contribuyendo tu experiencia en las críticas.