Java 在Firefox中打开新选项卡,并且使用Selenium的Chrome不起作用
我读了很多关于如何使用Selenium打开新窗口的选项。所有的问题和答案都是几年前的,也许这就是为什么他们不适合我。这就是为什么我想再次提出这个问题 我的第一种方法是使用javascript操作:Java 在Firefox中打开新选项卡,并且使用Selenium的Chrome不起作用,java,selenium,google-chrome,firefox,Java,Selenium,Google Chrome,Firefox,我读了很多关于如何使用Selenium打开新窗口的选项。所有的问题和答案都是几年前的,也许这就是为什么他们不适合我。这就是为什么我想再次提出这个问题 我的第一种方法是使用javascript操作: ((JavascriptExecutor) getDriver()).executeScript("window.open('','NewWindow');"); 我这里的问题是Firefox和Chrome的不同结果。Firefox将打开一个新窗口,Chrome将打开一个新选项卡。这意味着,如果我在
((JavascriptExecutor) getDriver()).executeScript("window.open('','NewWindow');");
我这里的问题是Firefox和Chrome的不同结果。Firefox将打开一个新窗口,Chrome将打开一个新选项卡。这意味着,如果我在不同的浏览器中执行测试,我的测试用例将无法按预期工作
在那之后,我想到了另一种方法。如果我发送快捷方式来打开一个新选项卡,可能两个浏览器的行为都相同。我的噩梦就这样开始了。下一个选项都不会在当前的Chrome和Firefox版本中打开任何内容:
getDriver().findElement(By.xpath(".//body")).sendKeys(Keys.COMMAND+"T");
getDriver().findElement(By.xpath(".//body")).sendKeys(Keys.COMMAND,"T");
getDriver().findElement(By.xpath(".//body")).sendKeys(Keys.chord(Keys.COMMAND + "T"));
final Actions builder = new Actions(getDriver());
builder.keyDown(Keys.COMMAND).sendKeys("T").perform();
- 打开新的空白窗口:-
((JavascriptExecutor)驱动程序).executeScript(“window.open('about:blank','u blank');”代码>
- 使用特定url打开新窗口:
((JavascriptExecutor)驱动程序).executeScript(“window.open('http://www.yahoo.com“,”空白“;”代码>
使用机器人类:-
Selenium中的Robot类用于模拟键盘和鼠标事件。因此,为了打开一个新选项卡,我们可以模拟按下控制键
,然后按下键盘的't'
键的键盘事件。打开新选项卡后,我们需要将焦点切换到它,否则驱动程序将仅尝试在父选项卡上执行操作。
对于切换焦点,我们将使用getWindowHandles()
获取新选项卡的句柄,然后将焦点切换到它
//Use robot class to press Ctrl+t keys
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_T);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_T);
//Implicit Wait
//driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS) ;
Thread.sleep(2000);
//Switch focus to new tab
ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
//Launch URL in the new tab
driver.get("http://google.com");*/
//使用robot类按Ctrl+t键
机器人=新机器人();
机器人按键(KeyEvent.VK_控制);
robot.keyPress(KeyEvent.VK_T);
robot.keyRelease(KeyEvent.VK_控制);
robot.keyrease(KeyEvent.VK_T);
//隐式等待
//driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
《睡眠》(2000年);
//将焦点切换到新选项卡
ArrayList tabs=新的ArrayList(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
//在新选项卡中启动URL
驱动程序。获取(“http://google.com");*/
机器人类使用selenium在新选项卡中打开url的两种方法
public class NewTab
{
public static void main(String[] args) throws InterruptedException, AWTException {
WebDriver driver = new FirefoxDriver();
driver.get("http://www.facebook.com/");
Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_T);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_T);
Set<String> tabs = (Set<String>)driver.getWindowHandles();
for(String tab : tabs)
{
driver.switchTo().window(tab);
System.out.println(driver.getTitle());
if(driver.getTitle().contains("New Tab"))
driver.get("http://www.google.com/");
}
}
}
公共类NewTab
{
公共静态void main(字符串[]args)抛出InterruptedException、AWTException{
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://www.facebook.com/");
机器人r=新机器人();
r、 按键(KeyEvent.VK_控件);
r、 按键(KeyEvent.VK_T);
r、 keyRelease(KeyEvent.VK_控件);
r、 密钥释放(KeyEvent.VK_T);
Set tabs=(Set)driver.getWindowHandles();
用于(字符串选项卡:选项卡)
{
driver.switchTo()窗口(选项卡);
System.out.println(driver.getTitle());
if(driver.getTitle()包含(“新选项卡”))
驱动程序。获取(“http://www.google.com/");
}
}
}
另一种方法,不使用for循环
public class NewTab {
public static void main(String[] args) throws InterruptedException, AWTException {
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_T);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_T);
String Base = driver.getWindowHandle();
Set<String> tabs = (Set<String>)driver.getWindowHandles();
tabs.remove(Base);
driver.switchTo().window(tabs.toArray()[0].toString());
driver.get("http://www.facebook.com/");
}
}
公共类NewTab{
公共静态void main(字符串[]args)抛出InterruptedException、AWTException{
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://www.google.com/");
机器人r=新机器人();
r、 按键(KeyEvent.VK_控件);
r、 按键(KeyEvent.VK_T);
r、 keyRelease(KeyEvent.VK_控件);
r、 密钥释放(KeyEvent.VK_T);
String Base=driver.getWindowHandle();
Set tabs=(Set)driver.getWindowHandles();
拆下(底座);
driver.switchTo().window(tabs.toArray()[0].toString());
驱动程序。获取(“http://www.facebook.com/");
}
}
请尝试下面的代码。
我没有使用javascript
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
当一位用户问我最终如何解决这个问题时,我的解决方案是:
// Save the current window reference
final String parentWindow = driver.getWindowHandle();
// Look for the element I would like to click
final WebElement elem = driver.findElement(By.xpath(xpath));
// Create an action to be performed
final Actions builder = new Actions(driver);
// The OSKEY is a global variable where depending on the OS is saved CMD or CTR
// With the special key chord, the program clicks on the element
builder.keyDown(OSKEY).click(elem).perform();
对我来说,它可以在没有浏览器问题的情况下工作。executeScript(“window.open(“'NewWindow');”)
打开一个带有geckodriver 0.26.0
和Firefox 71.0
的新选项卡。感谢您的回答,但您的第一个选项是我的第一个选项,它无法工作,就像我前面提到的一样。你的第二个选项我已经试过了,但是我没有找到命令(MAC)键。我先测试了,然后放在这里。它在我的两个浏览器中都可以正常工作。@j.barrio请参考此链接,我已经成功地使用了您的“window.open”()http://www.yahoo.com“,”空白“;”
方法。