使用JavascriptExecutor来sendKeys + click on web元素

Using JavascriptExecutor to sendKeys plus click on web element

本文关键字:on web 元素 click JavascriptExecutor sendKeys 使用      更新时间:2023-09-26

我试图在一个新的选项卡中打开一个链接,然后切换到该选项卡,在Firefox浏览器中,使用Java中的selenium。这是我的理解,为了做到这一点,我需要使用一个发送键组合。

为了在同一窗口中打开链接,我一直在使用这样的东西:

WebElement we = driver.findElement(By.xpath("//*[@id='btn']"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", we);

以上对我来说工作得很好。

现在我试着也sendKeys,如下所示,这是不工作:

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("keyDown(Keys.CONTROL)
                        .keyDown(Keys.SHIFT)
                        .click(arguments[0])
                        .keyUp(Keys.CONTROL)
                        .keyUp(Keys.SHIFT);", we);

任何建议吗?我无法找出sendKeys到JavascriptExecutor的正确语法。我也见过一些使用Actions的类似解决方案,但这对我来说也不起作用。

尝试下面的代码打开页面上的任何链接到新标签&切换到那个选项卡。在那里执行操作&返回第一个选项卡以进一步执行。

WebDriver driver = new FirefoxDriver();
        driver.get("http://stackoverflow.com/");
        WebElement e = driver.findElement(By.xpath(".//*[@id='nav-questions']"));       
        Actions action = new Actions(driver); 
        action.keyDown(Keys.CONTROL).build().perform(); //press control key
        e.click();
        Thread.sleep(10000); // wait till your page loads in new tab
        action.keyUp(Keys.CONTROL).build().perform(); //release control key
        driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "'t"); //move to new tab
        driver.navigate().refresh(); // refresh page
        driver.findElement(By.xpath(".//*[@id='hlogo']/a")).click(); //perform any action in new tab. I am just clicking logo
        driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "'t"); //switch to first tab
        driver.navigate().refresh(); 
        driver.findElement(By.xpath(".//*[@id='hlogo']/a")).click();// refresh first tab & continue with your further work.I am just clicking logo