Google chrome 如何使用webdriver在chrome中打开新窗口而不是新选项卡?

Google chrome 如何使用webdriver在chrome中打开新窗口而不是新选项卡?,google-chrome,selenium,selenium-webdriver,webdriver,automated-tests,Google Chrome,Selenium,Selenium Webdriver,Webdriver,Automated Tests,为了自动化我的测试应用程序,我需要在一个新窗口中打开几个链接,而不是选项卡。请记住,我并不是在新选项卡中显式打开链接,而是我的web应用程序在单击链接后自动将用户置于新选项卡中 我为什么要这样做? 因为在chrome浏览器上运行测试会关闭主选项卡并保持打开新打开的选项卡。最终测试失败。因此最终目的是打开新窗口而不是选项卡,并使用driver.getWindowHandles()正确处理它 到目前为止我做了什么? 我试图在Chrome中找到某种功能设置或配置文件,可以在一个新窗口中自动打开应该在选

为了自动化我的测试应用程序,我需要在一个新窗口中打开几个链接,而不是选项卡。请记住,我并不是在新选项卡中显式打开链接,而是我的web应用程序在单击链接后自动将用户置于新选项卡中

我为什么要这样做?

因为在chrome浏览器上运行测试会关闭主选项卡并保持打开新打开的选项卡。最终测试失败。因此最终目的是打开新窗口而不是选项卡,并使用
driver.getWindowHandles()
正确处理它

到目前为止我做了什么?


我试图在Chrome中找到某种功能设置或配置文件,可以在一个新窗口中自动打开应该在选项卡中打开的链接。但没有找到任何令人信服的解决方案大多数建议是按住CTRL键并单击链接。

我不是网页设计大师,但我可以建议以下场景:

// Get required page
// Excecute below JavaScript with JavaScriptExecutor
var reference = document.querySelector('a#someID').getAttribute('href'); // You can use your specific CSS Selector instead of "a#someID"
document.querySelector('a#someID').setAttribute("onclick", "window.open('" + reference + "', '', 'width=800,height=600')")
document.querySelector('a#someID').removeAttribute('href')
// Find target link
// Click on it
此代码应允许您在目标web元素的
HTML
源代码中进行更改,以强制其在新浏览器窗口中打开

注意在页面刷新之前,此代码元素在页面上的外观将被更改

另外,你没有提到你的编程语言,所以没有完整的实现。。。但是,这是
Python
实现示例:

from selenium import webdriver as web

dr = web.Chrome()
dr.get('https://login.live.com/login.srf?&wreply=https%3a%2f%2foutlook.live.com%2fowa%2f%3fnlp%3d1%26realm%3dlogin.live.com')

dr.execute_script("""
    var reference = document.querySelector('a#ftrTerms').getAttribute('href');
    document.querySelector('a#ftrTerms').setAttribute("onclick", "window.open('" + reference + "', '', 'width=800,height=600')")
    document.querySelector('a#ftrTerms').removeAttribute('href')
    """)
link = dr.find_element_by_id('ftrTerms')
link.click()

在Chrome浏览器中没有任何标志/设置/功能,可以在新窗口而不是新选项卡中打开链接,因此我通过WebDriver使用了Chrome扩展

我为什么这么做?

因为我的测试在Firefox上运行良好,我不知道在Chrome浏览器的新标签中打开的套件中有多少WebElement。该套件也非常庞大,因此对其核心页面类进行任何更改都可能破坏所有测试。此外,在元素级别更改代码将非常耗时,最重要的是,这不是一个通用的解决方案

我做了什么?

  • 我使用了一个chrome扩展,它可以在一个新窗口中打开所有新选项卡
  • 使用扩展名下载了此扩展名的CRX文件
  • 将CRX文件设置为Chrome的功能

    ChromeOptions options = new ChromeOptions();
    options.addExtensions(new File("pathOfCRXFile"));
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();         
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    WebDriver driver = new ChromeDriver(capabilities);
    

  • 因此,上面的操作会将所有新选项卡转换为新窗口。因此,每当驱动程序单击在新选项卡中进一步打开的任何链接时,都会将其打开到新窗口中。

    您可以尝试一下吗?让我们看看它是否适合你@Pri谢谢,首先我需要这个Chrome解决方案,其次我不想用webdriver在新窗口中打开链接。它的浏览器决定在哪里打开链接。所以我需要在chrome中进行某种配置,它总是在新窗口中打开链接,而新窗口应该在新选项卡中打开。问题很有趣。您可以右键单击并从菜单中选择选项吗??所以答案也不是针对chrome。但我仍然觉得右击有帮助。我需要一个通用的解决方案,因为我不知道有多少这样的链接在我的应用程序中存在。可能只是在浏览器级别配置它就可以帮助我为所有此类链接实现这一点。您是否尝试发送键
    Control+n
    ,启动一个新窗口,然后在新窗口中启动链接?