当前位置: 首页 > 面试题库 >

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

汪才英
2023-03-14
问题内容

我正在尝试使用Java中的Selenium在新选项卡中打开链接,然后在Firefox浏览器中切换到该选项卡。据我了解,为此,我需要使用发送键组合。

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

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


 类似资料:
  • 抛出错误为 java.lang.IllegalArgumentException:参数的类型非法:com.sun.proxy.$Proxy15位于org.openqa.selenium.remote.internal.WebElementToJsonConverter.apply(WebElementToJsonConverter.java:85),位于java.base/java.util.st

  • 问题内容: 由于某种原因,我无法将字符“ 3”写入页面上的输入元素。 这段代码: 导致在登录输入中写入“ 1245” …有人可以帮忙吗?我使用python 2.7,最新的chrome和最新的chromedriver 编辑: 也不管用。 -字符串中仅缺少“ 3” … 起作用的是 正如安德森(Andersson)在下文中建议的那样,但这不是解决方案。 我在Google搜索框中进行了尝试,并且遇到了相同

  • Google chrome昨天自动更新到78.0.3904.87版,我现在似乎对Selenium Webdriver有问题。 当我在Visual Studio中运行测试时,单击事件似乎发生了,但屏幕上的预期结果没有发生。例如,单击链接成功地通过代码(link.click),没有失败,但该链接没有在屏幕上被单击。 当我在调试模式下运行同一个测试并逐步进入每一段代码时,它工作正常,就好像seleniu

  • 我正在尝试使用selenium WebDriver实现应用程序的自动化。我经常遇到click action在WebElements上不起作用的情况。 例如,在html块中,类似于: 我已经试着把这件事做了差不多一个星期了。谁能帮帮我吗? 代码似乎确实改变了单击时的图像(我比较了单击前后的图像源)。但是没有可见的“onclick()”调用(我不确定是否有其他方法在click上调用java脚本函数,如

  • 我是Python的新手,我只是想写一个代码在浏览器中打开新标签。所以我寻找一些方法来做到这一点,我遇到了这个过程。但是,尽管它在youtube视频中运行良好,我的却不能。它只是打开了一个新的窗口,并前往google.com.But,它没有按下ctrl+t打开一个新的标签。我不知道为什么,因为它甚至没有在python外壳中显示任何错误。我希望有人能帮我解决这个问题,告诉我我的代码有什么问题。谢谢你

  • 问题内容: 我有一个页面,其源代码不可用,但是有一个输入框,其中光标闪烁。 我可以在没有找到元素的情况下将一些内容写到文本框中吗?我的意思是,某种方式下,发送键可以自动查找聚焦的输入框并输入输入内容。 我的代码无法正常工作 问题答案: 解决了