web-dev-qa-db-fra.com

Comment cliquer sur un élément dans Selenium WebDriver à l'aide de JavaScript

J'ai le code HTML suivant:

<button name="btnG" class="gbqfb" aria-label="Google Search" id="gbqfb"><span class="gbqfi"></span></button>

Le code suivant pour cliquer sur le bouton "Recherche Google" fonctionne bien avec Java dans WebDriver.

driver.findElement(By.id("gbqfb")).click();

Je veux utiliser JavaScript avec WebDriver pour cliquer sur le bouton. Comment puis-je le faire?

29
Ripon Al Wasim

L'exécution d'un clic via JavaScript présente certains comportements dont vous devez être conscient. Si, par exemple, le code lié à l'événement onclick de votre élément appelle window.alert(), vous pouvez trouver votre code Selenium bloqué, selon l'implémentation du pilote de navigateur. Cela dit, vous pouvez utiliser la classe JavascriptExecutor pour le faire. Ma solution diffère des autres solutions proposées, toutefois, en ce que vous pouvez toujours utiliser les méthodes WebDriver pour localiser les éléments.

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

Notez également qu'il vaut peut-être mieux utiliser la méthode click() de l'interface WebElement, mais en désactivant les événements natifs avant l'instanciation de votre pilote. Cela permettrait d'atteindre le même objectif (avec les mêmes limites potentielles), mais ne vous obligerait pas à écrire et à gérer votre propre code JavaScript.

83
JimEvans

Voici le code utilisant JavaScript pour cliquer sur le bouton dans WebDriver:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");
6
Ripon Al Wasim

Je sais que ce n'est pas du JavaScript, mais vous pouvez également utiliser le clic de souris pour cliquer sur une ancre Javascript dynamique

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();
}
3
djangofan

Pas sûr que la réponse de l'OP ait été vraiment répondue.

var driver = new webdriver.Builder().usingServer('serverAddress').withCapabilities({'browserName': 'firefox'}).build();

driver.get('http://www.google.com');
driver.findElement(webdriver.By.id('gbqfb')).click();
2
Dale

Vous ne pouvez pas utiliser WebDriver pour le faire en JavaScript, car WebDriver est un outil Java. Cependant, vous pouvez exécuter JavaScript à partir de Java à l'aide de WebDriver et appeler un code JavaScript qui clique sur un bouton particulier.

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.document.getElementById('gbqfb').click()");
2
Stilltorik

Ce code effectuera l'opération de clic sur la WebElement "nous" après 100 ms:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;

jse.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", we);
0
hemanto

Par XPath: inspectez l'élément sur la page cible, copiez Xpath et utilisez le script ci-dessous: a fonctionné pour moi.

WebElement nameInputField = driver.findElement(By.xpath("html/body/div[6]/div[1]/div[3]/div/div/div[1]/div[3]/ul/li[4]/a"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", nameInputField);
0
Jyothi M