在新标签页中打开链接适用于Firefox,但不适用于使用Selenium的Chrome浏览器

时间:2015-05-12 09:34:34

标签: google-chrome firefox selenium selenium-webdriver

我有一个测试,我需要在新标签中打开一个链接。这必须适用于Firefox和Chrome。我首先尝试使用Google页面上的Gmail链接。

在Firefox上它完美运行,Gmail在新标签页中打开。 但在Chrome上,Gmail页面会在同一窗口中打开,右键单击后菜单仍然保持打开状态。有人遇到过这个问题吗?

Beneath是我的示例代码。

Firefox代码:

FirefoxProfile myprofile;
ProfilesIni profile = new ProfilesIni();            
myprofile = profile.getProfile("SeleniumAuto");             
WebDriver driver = new FirefoxDriver(myprofile);
driver.get("http://www.google.com");    
driver.manage().window().maximize();

Actions a = new Actions(driver);
WebElement e = driver.findElement(By.xpath("/html/body/div/div[3]/div[1]/div/div/div/div[1]/div[2]/a"));
a.moveToElement(e);
a.contextClick(e).sendKeys(Keys.ARROW_DOWN)
 .sendKeys(Keys.ENTER).build().perform();            

Chrome代码:

ChromeOptions options = new ChromeOptions();
options.addArguments("--test-type");
WebDriver driver = new ChromeDriver(options);
driver.get("http://www.google.com");    
driver.manage().window().maximize();*/    

Actions a = new Actions(driver);
WebElement e = driver.findElement(By.xpath("/html/body/div/div[3]/div[1]/div/div/div/div[1]/div[2]/a"));
a.moveToElement(e);
a.contextClick(e).sendKeys(Keys.ARROW_DOWN)
 .sendKeys(Keys.ENTER).build().perform();

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。显然,ARROW_DOWN不起作用,所以我尝试使用键组合,它适用于我。代码如下:

1)在新标签页中打开,焦点仍在当前标签上

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(your_path)));
actions.keyDown(Keys.CONTROL).perform();
driver.findElement(By.xpath(your_path)).click();
actions.keyUp(Keys.CONTROL);

2)在新标签页中打开并移至新标签页

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(your_path)));
actions.keyDown(Keys.CONTROL).perform();
actions.keyDown(Keys.SHIFT).perform();
driver.findElement(By.xpath(your_path)).click();
actions.keyUp(Keys.SHIFT);
actions.keyUp(Keys.CONTROL);

希望这有帮助。

答案 1 :(得分:0)

是的,您可以使用Selenium轻松完成。使用键命令(Ctrl + T)打开一个新选项卡,然后使用Ctrl + Tab(Ctrl + \ t)命令切换到新打开的选项卡并执行任何必要的操作。它会像这样

//open a  new tab
WebElement e= driver.findElement(By.cssSelector(abc)).sendKeys(Keys.Control + "t");
//switch control to new tab
e.sendKeys(Keys.Control + "\t");
{
    perform some function here
    enter code here
}
//switch back to old tab
e.sendKeys(Keys.Control + "\t");

如果浏览器只打开了两个标签,这将有效,因为它将使用Tab键在两个打开的标签之间移动。

希望这有帮助。

答案 2 :(得分:0)

对于Chrome,请尝试以下操作:

Actions a = new Actions(webdriver);
WebElement e = webdriver.findElement(By.xpath(your_path));
a.moveToElement(e).keyDown(Keys.CONTROL).click().build().perform();