44

私は次の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を使用したい。どうすればいいですか?

4

10 に答える 10

108

JavaScript を介してクリックを実行すると、注意が必要な動作がいくつかあります。たとえば、onclick要素のイベントにバインドされたコードが invokeswindow.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);

また、インターフェイスのclick()メソッドを使用した方がよい場合もありますが、ドライバーをインスタンス化する前にネイティブ イベントを無効にすることにも注意してください。これにより、同じ目標が達成されますが (潜在的な制限は同じですが)、独自の JavaScript を作成して保守する必要はありません。WebElement

于 2012-08-14T15:49:49.567 に答える
7

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

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");
于 2012-08-14T08:13:50.067 に答える
5

これが 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();
}
于 2012-12-18T17:59:27.920 に答える
2

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

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.document.getElementById('gbqfb').click()");
于 2012-08-14T08:18:11.077 に答える
-13

クロス ブラウザ テストの Java スクリプト

public class MultipleBrowser {

    public WebDriver driver= null;
    String browser="mozilla";
    String url="https://www.omnicard.com";

    @BeforeMethod
    public void LaunchBrowser() {

        if(browser.equalsIgnoreCase("mozilla"))
            driver= new FirefoxDriver();
        else if(browser.equalsIgnoreCase("safari"))
            driver= new SafariDriver();
        else if(browser.equalsIgnoreCase("chrome"))
            //System.setProperty("webdriver.chrome.driver","/Users/mhossain/Desktop/chromedriver");
            driver= new ChromeDriver(); 
        driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);
        driver.navigate().to(url);
    }

}

ただし、Firefox を実行する場合は、クロム パスを無効にする必要があります。そうしないと、ブラウザは起動しますが、アプリケーションは起動しない場合があります (両方の方法を試してください)。

于 2014-09-23T17:53:03.983 に答える