web-dev-qa-db-ja.com

JavaScriptを使用してSelenium WebDriverの要素をクリックする方法

次のHTMLがあります。

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

「Google検索」ボタンをクリックするための次のコードは、WebDriverでJavaを使用してうまく機能しています。

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

WebDriverで JavaScript を使用してボタンをクリックします。どうすればいいですか?

32
Ripon Al Wasim

JavaScriptを介してクリックを実行すると、注意すべきいくつかの動作があります。たとえば、エレメントのonclickイベントにバインドされたコードがwindow.alert()を呼び出す場合、ブラウザードライバーの実装によっては、Seleniumコードがハングすることがあります。ただし、これを行うにはJavascriptExecutorクラスを使用できます。しかし、私のソリューションは、要素を見つけるためにWebDriverメソッドを使用できるという点で、提案されている他のソリューションとは異なります。

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

また、WebElementインターフェイスのclick()メソッドを使用する方がよいかもしれませんが、ドライバーをインスタンス化する前に ネイティブイベントを無効にする を使用することをお勧めします。これにより、同じ目標が(潜在的な制限は同じで)達成されますが、独自のJavaScriptを記述して維持することは強制されません。

87
JimEvans

JavaScriptを使用してWebDriverのボタンをクリックするコードは次のとおりです。

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

これはJavaScriptではないことは知っていますが、物理的にマウスクリックを使用して動的な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();
}
3
djangofan

OPの答えが本当に答えられたのかはわかりません。

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

WebDriverはJavaツールであるため、WebDriverを使用してJavaScriptで実行することはできません。ただし、WebDriverを使用してJavaからJavaScriptを実行でき、特定のボタンをクリックするJavaScriptコードを呼び出すことができます。

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

このコードは、100ミリ秒後にWebElement "we"でクリック操作を実行します。

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

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

XPathで:ターゲットページの要素を調べ、Xpathをコピーして、以下のscript:worked for meを使用します。

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