it-swarm.com.de

So klicken Sie mit JavaScript auf ein Element in Selenium WebDriver

Ich habe folgendes HTML:

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

Mein folgender Code zum Klicken auf die Schaltfläche "Google-Suche" funktioniert mit Java in WebDriver gut.

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

Ich möchte JavaScript mit WebDriver verwenden, um auf die Schaltfläche zu klicken. Wie kann ich es tun?

29
Ripon Al Wasim

Das Ausführen eines Klicks über JavaScript hat einige Verhaltensweisen, die Sie kennen sollten. Wenn der an das onclick -Ereignis Ihres Elements gebundene Code window.alert() aufruft, wird Ihr Selenium-Code je nach Implementierung des Browsertreibers möglicherweise hängen bleiben. Das heißt, Sie können dazu die JavascriptExecutor-Klasse verwenden. Meine Lösung unterscheidet sich von anderen vorgeschlagenen jedoch darin, dass Sie weiterhin die WebDriver-Methoden zum Suchen der Elemente verwenden können.

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

Sie sollten auch beachten, dass Sie die click()-Methode der WebElement-Schnittstelle besser nutzen können, aber native Ereignisse deaktivieren bevor Sie den Treiber instanziieren. Dies würde dasselbe Ziel erreichen (mit den gleichen potenziellen Einschränkungen), aber Sie müssen nicht Ihr eigenes JavaScript schreiben und verwalten.

83
JimEvans

Hier ist der Code, der JavaScript verwendet, um auf die Schaltfläche in WebDriver zu klicken:

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

Ich weiß, dass dies nicht JavaScript ist, Sie können jedoch auch mit der Maus einen dynamischen Javascript-Anker anklicken:

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

Nicht sicher, ob die OP-Antwort wirklich beantwortet wurde.

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

Sie können WebDriver nicht in JavaScript dafür verwenden, da WebDriver ein Java-Tool ist. Sie können JavaScript jedoch mithilfe von WebDriver in Java ausführen. Außerdem können Sie JavaScript-Code aufrufen, der auf eine bestimmte Schaltfläche klickt.

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

Dieser Code führt den Klickvorgang für die WebElement "wir" nach 100 ms aus:

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

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

Von XPath: Untersuche das Element auf der Zielseite, kopiere Xpath und verwende das folgende Skript: Für mich gearbeitet.

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