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

时间:2017-01-05 09:03:12

标签: google-chrome selenium selenium-webdriver webdriver automated-tests

为了自动化我的测试应用程序,我需要在新窗口中打开几个链接而不是tab。请记住,我没有明确打开新标签中的链接,这是我的网络应用程序,在点击链接后会自动将用户放在新标签页中。

为什么我要这样做?

因为在Chrome浏览器上运行测试会关闭主选项卡并保持打开新打开的选项卡。最终未通过测试。最终目的是打开新窗口而不是制表符并使用driver.getWindowHandles()正确处理。

到目前为止我做了什么?

我试图在Chrome中找到某种功能设置或配置文件,它会在新窗口中自动打开链接,这些链接应该在选项卡中打开。但是没有找到任何令人信服的解决方案,大多数建议都是CTRL + CLICK在链接上。

2 个答案:

答案 0 :(得分:2)

我不是网页设计的大师,但我可以建议以下方案:

// 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

此代码应允许您更改目标网络元素的HTML源代码,以强制在新的浏览器窗口中打开。

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

P.S。您没有提到您的编程语言,因此没有完整的实现......但是,这是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()

答案 1 :(得分:2)

好吧,如果Chrome浏览器中没有任何标记/设置/功能,会在新窗口中打开链接而不是新标签,我会通过WebDriver使用Chrome扩展程序。

为什么我这样做?

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

我做了什么?

  1. 我使用了Chrome扩展程序New Tab New Window,它将所有新标签打开到一个新窗口。
  2. 使用扩展名Get CRX
  3. 下载此扩展程序的CRX文件
  4. 将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);
    
  5. 因此,上面会将所有新标签转换为新窗口。因此,只要驱动程序点击任何在新标签页中进一步打开的链接,就会打开新窗口。