Selenium Web驱动程序:打开新选项卡而不是新窗口

u4dcyp6a  于 2022-11-29  发布在  其他
关注(0)|答案(3)|浏览(358)

我正在使用Selenium WebDriver。每个链接都在新的浏览器窗口中打开。这对我来说很不方便。我如何更改它,使它只在新选项卡中打开?

bxjv4tth

bxjv4tth1#

Selenium现在有能力切换标签页。下面的代码1:将适用于Firefox,代码2:对于IE和chrome,我们可以通过使用Robot类来完成,但控件不会自动移动到当前选项卡,因此我们需要使用窗口句柄方法切换到当前选项卡。下面给出的代码在运行单独的脚本时效果很好,但在作为套件运行时,您可能会感到执行键盘事件时的痛苦。为了避免这种情况,我们不得不通过使用selenium-Java中的javascript执行器,使用用户定义的javascript方法来处理其他可能性。
我们可以切换窗口和选项卡之间的识别其名称分配给每个窗口,我们打开和名称将在字母数字字符。

***Code 1***
    //First tab(default tab)
    driver.navigate().to("http://www.google.com");
    driver.manage().window().maximize();

    //second tab
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
    driver.navigate().to("https://yahoo.com");

    //third tab
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
    driver.navigate().to("http://www.google.com");

    //move to very first tab.
    driver.findElement(By.cssSelector("body"))
            .sendKeys(Keys.CONTROL + "\t");

    // To close the current tab.    
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "w");
    **code 2**
    driver.navigate().to("http://www.google.com");
    driver.manage().window().maximize();

    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_T);

    Set<String> handles = driver.getWindowHandles();
    List<String> handlesList = new ArrayList<String>(handles);
    String newTab = handlesList.get(handlesList.size() - 1);

    // switch to new tab
    driver.switchTo().window(newTab); 
    driver.get("http://www.yahoo.com");
gr8qqesn

gr8qqesn2#

Selenium目前无法切换标签页。因此我们强制浏览器在新窗口中打开链接,但由于我们可以切换窗口,因此我们强制浏览器采用这种方法。这个问题可能会在以后的版本中得到修复

nkcskrwz

nkcskrwz3#

如果你不在乎标签页之间的切换,这是一个很高的可能性,只是使用以下选项在firefox:

FirefoxOptions options = new FirefoxOptions().addPreference("browser.link.open_newwindow", 3);
WebDriver driver1 = new new FirefoxDriver(options);

正如下面的第一个链接所解释的,Selenium希望给予用户能够在标签页之间切换。实现这一点的解决方案是指示浏览器将标签页作为窗口打开。然而,这有一些不希望的副作用,如:

  • 你必须手动切换到一个链接刚刚打开的标签页(并使用技巧来找到哪个是这个标签页)。
  • 如果关闭当前选项卡,则必须手动切换回原始选项卡。

上面的代码为firefox恢复了这个选项。
链接:

相关问题