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元素调用事件的代码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);

click()您还应该注意,使用接口的方法可能会更好WebElement,但在实例化驱动程序之前禁用本机事件。这将实现相同的目标(具有相同的潜在限制),但不会强迫您编写和维护自己的 JavaScript。

于 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 回答
3

不确定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();
于 2013-06-16T19:30:05.250 回答
2

您不能使用 WebDriver 在 JavaScript 中执行此操作,因为 WebDriver 是一种 Java 工具。但是,您可以使用 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 回答
1

通过 XPath:检查目标页面上的元素,复制 Xpath 并使用以下脚本:为我工作。

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);
于 2018-08-09T05:09:06.147 回答
1
const {Builder, By, Key, util} = require('selenium-webdriver')

// FUNÇÃO PARA PAUSA
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function example() {

    // chrome
    let driver = await new Builder().forBrowser("firefox").build()
    await driver.get('https://www.google.com.br')
    // await driver.findElement(By.name('q')).sendKeys('Selenium' ,Key.RETURN)

    await sleep(2000)

    await driver.findElement(By.name('q')).sendKeys('Selenium')

    await sleep(2000)

    // CLICAR
    driver.findElement(By.name('btnK')).click()


}
example()

Com essas últimas linhas, você pode clicar !

于 2020-05-05T03:36:31.017 回答
0

此代码将WebElement在 100 毫秒后对“我们”执行点击操作:

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

jse.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", we);
于 2017-02-01T09:54:29.147 回答
0

另一个最简单的解决方案是使用 Key.RETUEN

点此查看详细解决方案

driver.findElement(By.name("q")).sendKeys("Selenium Tutorial", Key.RETURN);

于 2020-03-11T23:32:11.087 回答
-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 时,你需要禁用 chrome 路径,否则浏览器会启动但应用程序可能不会。(尝试两种方式)。

于 2014-09-23T17:53:03.983 回答