使用 JavascriptExecutor 发送键并点击 web 元素
Using JavascriptExecutor to sendKeys plus click on web element
我正在尝试在新选项卡中打开 link,然后在 Firefox 浏览器中使用 Java 中的 selenium 切换到该选项卡。据我了解,为了执行此操作,我需要使用发送键组合。
为了在同一个 window 中打开 link,我一直在使用这样的东西:
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);
有什么建议吗?我想不出将 sendKeys 发送到 JavascriptExecutor 的正确语法。我已经看到一些使用 Actions 的类似解决方案,但这对我也没有用。
尝试使用以下代码将页面上的任何 link 打开到新选项卡并切换到该选项卡。在那里执行操作并返回第一个选项卡以进一步执行。
WebDriver driver = new FirefoxDriver();
driver.get("http://whosebug.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
我正在尝试在新选项卡中打开 link,然后在 Firefox 浏览器中使用 Java 中的 selenium 切换到该选项卡。据我了解,为了执行此操作,我需要使用发送键组合。
为了在同一个 window 中打开 link,我一直在使用这样的东西:
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);
有什么建议吗?我想不出将 sendKeys 发送到 JavascriptExecutor 的正确语法。我已经看到一些使用 Actions 的类似解决方案,但这对我也没有用。
尝试使用以下代码将页面上的任何 link 打开到新选项卡并切换到该选项卡。在那里执行操作并返回第一个选项卡以进一步执行。
WebDriver driver = new FirefoxDriver();
driver.get("http://whosebug.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