传递ChromeOptions而不实例化新的WebDriver

时间:2016-02-29 18:28:54

标签: java selenium webdriver testng chrome-options

我正在尝试将ChromeOptions传递给我的驱动程序以允许弹出窗口。我正在使用带有@BeforeClass,@ Test和@AfterClass注释的TestNG ..我正在尝试启用弹出窗口,并且我已经成功使用以下方法。

@BeforeClass
public void setUp(){
    if (driver instanceof ChromeDriver){
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--disable-popup-blocking");
        driver = new ChromeDriver(options);
    }
   }

虽然这确实有效,但它会打开webdriver,然后打开另一个选项。我不想弹出两个webdrivers ..我只想将这些选项传递给第一个webdriver!我使用xml和TestExtension类来运行这些,其中驱动程序被实例化并且不想更改该类。有没有办法将driver = new ChromeDriver(选项)更改为只会传递这些选项的内容?谢谢!

1 个答案:

答案 0 :(得分:1)

如果不改变TestExtension类,则无法执行此操作。原因是您传递的任何参数都会传递给在实例化时生成的浏览器。之后,无法更改任何内容以更改生成的浏览器的行为。您需要更改TestExtension类,然后提供一种机制,其中用户基本上也可以注入自己的功能,这将在产生浏览器之前由TestExtension考虑。它可能与传入类的完全限定的包名称一样简单,在调用时,它可以实例化您通过JVM参数传递的功能对象。

您的TestExtension类基本上会检查JVM参数是否传递任何自定义功能,如果找到,它会将这些功能合并到其功能中,然后生成浏览器。这是这样做的唯一方法。