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?
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.
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();");
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();
}
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();
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()");
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);
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);