我阅读了很多与使用 Selenium 打开新窗口的方式相关的选项。所有的问题和答案都是几年前的,也许这就是它们对我不起作用的原因。这就是为什么我想再次提出这个问题。
我的第一个方法是使用 javascript 操作:
((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"));
- 使用 Action
final Actions builder = new Actions(getDriver()); builder.keyDown(Keys.COMMAND).sendKeys("T").perform();
我正在考虑尝试使用 COMMAND 键向下单击任何链接,但也许还有其他简单的方法可以在不同的浏览器中打开新选项卡。这是我的问题,您现在是否可以通过相同的操作在不同的浏览器中打开新选项卡而不是新窗口?
其他信息
Selenium 版本 -> 3.141.59
Chrome 版本 -> 79.0.3945.79
Firefox 版本 -> 70.0.1
提前谢谢你。
最佳答案
这可能对你有帮助:-
使用JavascriptExecutor:-
- 打开新的空白窗口:-
((JavascriptExecutor)driver).executeScript("window.open('about:blank','_blank');");
- 使用特定 url 打开新窗口:
((JavascriptExecutor)driver).executeScript("window.open('http://www.yahoo.com','_blank');");
使用机器人类:-
Selenium 中的机器人类用于模拟键盘和鼠标事件。因此,为了打开一个新选项卡,我们可以模拟按下 Control Key
然后是键盘的 ‘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");*/
关于java - 使用 Selenium 在 Firefox 和 Chrome 中打开新标签页不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59370504/