Selenium firefox浏览器修改为标签页打开方式的各种坑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ouyanggengcheng/article/details/82886868

需求:

    今天有位朋友遇到一个梗,selenium使用firefox打开多个网页时,firefox总是以新窗口的方式打开;而这位朋友的需求是以标签页的方式打开新页面。

1.新窗口方式:

2.新标签页方式(在IE称为新选项卡):

    当然从selenium观点来出发,无论浏览器以新窗口或者新标签,都不影响WebDriver操作元素,只需要做好句柄的切换即可。而现在的需求就是不想以新窗口方式打开,因为打开多个窗口觉得烦、乱;哈哈,我是处女座的,不知道这位朋友是不是。

解决思路

1.第一点:“修改浏览器的设置”

    如下图设置以标签页方式打开设置好

    使用selenium运行代码,发现依然是以窗口的方式打开,查看selenium启动的firefox浏览器设置,发现”需要新建窗口时以新建标签页代替(T)“这个选项是取消的,这就可以推断,WebDriver启动firefox时会重置浏览器的配置。

2.第二点:代码设置

    冒出的思路是在selenium启动firefox时,设置一下浏览器的打开新窗口的方式,通过查询资料知道browser.link.open_newwindow的值是设置浏览器新开窗口的方式

  • 值为1,在当前窗口打开
  • 值为2,新窗口方式打开
  • 值为3,以标签页方式打开

启动时设置的代码如下:(注意每个default文件在不同机器上路径不同)

String firefoxProfileDir="C:\\Users\\Administrator\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\vxhj8pmc.default";

FirefoxProfile profile = new FirefoxProfile(new File(firefoxProfileDir));

profile.setPreference("browser.link.open_newwindow", 3);

WebDriver driver = new FirefoxDriver(profile);  

运行后报错Caused by: java.lang.IllegalArgumentException: Preference browser.link.open_newwindow may not be overridden: frozen value=2, requested value=3,不允许修改配置。

3.第三点:修改webdriver_prefs.json文件

    继续查资料发现selenium的jar中对firefox进行了格外的照顾,有一个特定的json文件规定了firefox浏览器的配置,这个webdriver_prefs.json文件路径在org/openqa/selenium/firefox下面;

    打开文件找到browser.link.open_newwindow的值为2,表示firefox浏览器以新窗口的方式打开。所以无论我们做任何操作都是徒劳无功的。找到原因后,就好办了,只要想办法把这个文件的browser.link.open_newwindow值改成3,就会以标签页方式打开。

    幸运的是这个文件是Json文件,而不是class编译文件里写死的,所以我们可以尽情的修改它。把jar后缀改成zip后缀,找到文件打开修改为3后保存,再改回jar的后缀即可(记得备份,后面有彩蛋)。然后替换Eclipse中的旧jar包,运行代码,神奇的发现,firefox以标签页的方式打开窗口,完美的解决了需求。

彩蛋来了

    以标签页的方式打开新窗口,兴高采烈之际,切换句柄来了一个大坑,使用firefox的标签页方式打开,无论打开了多少个,使用driver.getWindowHandles()方法得到的Set句柄集合都只有一个值,而用IE、Chrome并没有这个问题。为了验证是不是2变成3引起的,把备份的还原回去运行,发现真是这样,以新窗口的方式打开可以正确得到全部句柄。就因为一点处女座情节知道了这么大的问题,好像也挺知足的。在度娘上找答案是不可能的,翻墙出去找到了原因,大概的解释就是说,驱动程序无法管理以标签页的方式打开的窗口。具体请看https://github.com/SeleniumHQ/selenium/issues/1614

总结:这也就说得过去,为什么selenium要默认设置2了,对于Selenium来说新窗口是最标准的firefox打开方式。

百度阅读:https://yuedu.baidu.com/ebook/82a757ec7e192279168884868762caaedd33baa3

猜你喜欢

转载自blog.csdn.net/ouyanggengcheng/article/details/82886868