Selenium Webdriver试图使用';ctrl+;t';要打开选项卡,请使用Javascript

Selenium Webdriver试图使用';ctrl+;t';要打开选项卡,请使用Javascript,javascript,selenium,selenium-webdriver,tabs,sendkeys,Javascript,Selenium,Selenium Webdriver,Tabs,Sendkeys,我正在运行SeleniumWebDriver来测试一个正在开发的web应用程序(到目前为止,我已经创建了很多测试)。我一直在尝试在Selenium打开的窗口中打开几个新选项卡,但迄今为止没有成功。我浏览了很多不同的解决方案,但大多数都是针对Java或Python的,我正在使用Javascript(我需要使用Javascript) Selenium Webdriver:v.3.1.0 OS:Xubuntu 16.04 浏览器:Chrome 55.0.2883.87和Firefox 50.1.0 我

我正在运行SeleniumWebDriver来测试一个正在开发的web应用程序(到目前为止,我已经创建了很多测试)。我一直在尝试在Selenium打开的窗口中打开几个新选项卡,但迄今为止没有成功。我浏览了很多不同的解决方案,但大多数都是针对Java或Python的,我正在使用Javascript(我需要使用Javascript)

Selenium Webdriver:v.3.1.0 OS:Xubuntu 16.04 浏览器:Chrome 55.0.2883.87和Firefox 50.1.0

我尝试过各种解决方案,包括:

  • 动作序列,在Chrome和Firefox中都不起作用,但在Firefox中却有抱怨:

    driver.actions().keyDown(Key.CONTROL).sendKeys('n').keyUp(Key.CONTROL).perform()

  • 使用Key.chord(),这不会导致任何错误和反应,但会发送按键-Firefox在按下按钮后会给出一个奇怪的字符码

    driver.findElement(By.css(“body”)).sendKeys(Key.chord(Key.CONTROL,'t'))

  • 仅Key.CONTROL,这也不会导致任何错误,没有任何反应,但会发送按键-Firefox在按下按钮后会给出一个奇怪的字符码

    driver.findElement(By.css(“body”)).sendKeys(Key.CONTROL+“t”)

我现在要做的是将驱动程序导航到一个具有javascript按键检测的网站,并查看它们是否在“aaa”之后被单击:

driver.get("http://unixpapa.com/js/testkey.html");
driver.findElement(By.css("body")).sendKeys("aaa");
driver.findElement(By.css("body")).sendKeys(Key.CONTROL + "t");
这将导航到页面,并在页面检测区域输出:

keydown  keyCode=17        which=17        charCode=0        
keydown  keyCode=84  (T)   which=84  (T)   charCode=0        
keypress keyCode=116 (t)   which=116 (t)   charCode=116 (t)  
keyup    keyCode=84  (T)   which=84  (T)   charCode=0        
keyup    keyCode=17        which=17        charCode=0  

我相信这意味着他们已经被点击了。但是,没有反应,也没有创建选项卡。任何地方都没有显示错误,没有投诉。没有什么。我不确定这是一个bug还是一个问题,或者是我可能做得不对的事情。因此,如果有人有任何想法,请帮助。

要打开新选项卡,您可以尝试使用

driver.executeScript('window.open();');
尝试使用以下(机器人类):


使用此方法打开带有url的新选项卡

嗨,Andersson,谢谢你的回答。我相信这会打开一扇新的窗户,对吗?我需要在窗户把手之间切换,这是我的安全网。但是,我想知道我是否可以打开新选项卡而不是windows。这取决于您使用的浏览器和个人设置。尝试检查它是否在您的案例中打开窗口或选项卡。还要注意的是,即使打开了新选项卡,您仍然需要使用
driver.switch\u to.window(driver.window\u句柄[-1]
)切换到它…哇,它确实打开了一个新选项卡。我一直在避免这样做,因为我认为这只是为了打开一个窗口,而不是一个标签。好极了非常感谢,救了我一天:)。是的,必须切换不是问题,但我确实想让它打开一个新的标签,这样做。再次感谢,欢迎。另外请注意,如果您想在新选项卡中打开
URL
,您只需将其作为参数传递给
open()
as
window.open('https://google.com)
太棒了!是的,必须切换不是问题,但我确实想让它打开一个新的标签,这样做。再次感谢!嗨,库沙尔。谢谢你的回答。我用的是纯硒,我相信这是机器人框架,对吗?(不确定,因为我以前没有使用过它,而且对Selenium来说还很新)也不确定这是javascript。因为到目前为止,我已经有很多测试使用纯Selenium javascript绑定在javascript中运行,所以继续使用它们对我来说很重要。
   Robot robo = new Robot();
   robo.keyPress(KeyEvent.VK_CONTROL);
   robo.keyPress(KeyEvent.VK_T);
   robo.keyRelease(KeyEvent.VK_CONTROL);
   robo.keyRelease(KeyEvent.VK_T);
protected void openNewTab(String url) {
        ((JavascriptExecutor) driver).executeScript("window.open('" + url + "','_blank');");
    }