Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavascriptExecutor发送密钥并单击web元素_Javascript_Java_Firefox_Selenium_Sendkeys - Fatal编程技术网

使用JavascriptExecutor发送密钥并单击web元素

使用JavascriptExecutor发送密钥并单击web元素,javascript,java,firefox,selenium,sendkeys,Javascript,Java,Firefox,Selenium,Sendkeys,我正在尝试在一个新选项卡中打开一个链接,然后在Firefox浏览器中使用Java中的selenium切换到该选项卡。我的理解是,为了做到这一点,我需要使用发送键组合 为了在同一个窗口中打开链接,我一直在使用以下方法: WebElement we = driver.findElement(By.xpath("//*[@id='btn']")); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeS

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

为了在同一个窗口中打开链接,我一直在使用以下方法:

WebElement we = driver.findElement(By.xpath("//*[@id='btn']"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", we);
上述方法对我来说很有效

现在,我还尝试发送密钥,如下所示,但这不起作用:

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

有什么建议吗?我想不出向JavascriptExecutor发送密钥的正确语法。我见过一些使用操作的类似解决方案,但这对我也不起作用。

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

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

当您使用操作执行CTRL+SHIFT+click时,发生了什么?谢谢。@alecxe实际上,如果我使用
新操作(驱动程序).keyDown(键.控制).keyDown(键.移位).单击(我们).keydup(键.C‌​key.SHIFT.perform(),则在当前选项卡中打开链接。我也不知道如何使其正常工作。为什么要使用Actions或JavascriptExecutor执行sendKeys?纯硒WebElement不起作用?