在不实例化新 WebDriver 的情况下传递 ChromeOptions
passing ChromeOptions without instantiating new WebDriver
我正在尝试将 ChromeOptions 传递给我的驱动程序以允许弹出窗口。我正在将 TestNG 与 @BeforeClass、@Test 和 @AfterClass 注释一起使用。我正在尝试启用弹出窗口,并且我使用以下方法成功地做到了这一点。
@BeforeClass
public void setUp(){
if (driver instanceof ChromeDriver){
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-popup-blocking");
driver = new ChromeDriver(options);
}
}
虽然这确实有效,但它会打开网络驱动程序,然后打开另一个带有选项的驱动程序。我不想弹出两个网络驱动程序。我只想将这些选项传递给第一个网络驱动程序!我 运行 这些使用 xml 和 TestExtension class,其中驱动程序被实例化并且不想改变 class。有没有办法将 driver = new ChromeDriver(options) 更改为只会传递这些选项的东西?谢谢!
如果不更改 TestExtension class,则无法执行此操作。原因是您传递的任何参数都会传递给在实例化时生成的浏览器。之后就没有办法改变任何东西来改变生成的浏览器的行为。您需要更改您的 TestExtension class,然后提供一种机制,其中用户基本上也可以注入他们自己的功能,TestExtension 在生成浏览器之前会考虑这些功能。它可以像传递 class 的完全限定包名称一样微不足道,当调用它时可以实例化您通过 JVM 参数传递的功能对象。
您的 TestExtension class 基本上会检查 JVM 参数以查找正在传递的任何自定义功能,如果找到,它会将这些功能也合并到它的功能中,然后生成浏览器。这是唯一的方法。
我正在尝试将 ChromeOptions 传递给我的驱动程序以允许弹出窗口。我正在将 TestNG 与 @BeforeClass、@Test 和 @AfterClass 注释一起使用。我正在尝试启用弹出窗口,并且我使用以下方法成功地做到了这一点。
@BeforeClass
public void setUp(){
if (driver instanceof ChromeDriver){
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-popup-blocking");
driver = new ChromeDriver(options);
}
}
虽然这确实有效,但它会打开网络驱动程序,然后打开另一个带有选项的驱动程序。我不想弹出两个网络驱动程序。我只想将这些选项传递给第一个网络驱动程序!我 运行 这些使用 xml 和 TestExtension class,其中驱动程序被实例化并且不想改变 class。有没有办法将 driver = new ChromeDriver(options) 更改为只会传递这些选项的东西?谢谢!
如果不更改 TestExtension class,则无法执行此操作。原因是您传递的任何参数都会传递给在实例化时生成的浏览器。之后就没有办法改变任何东西来改变生成的浏览器的行为。您需要更改您的 TestExtension class,然后提供一种机制,其中用户基本上也可以注入他们自己的功能,TestExtension 在生成浏览器之前会考虑这些功能。它可以像传递 class 的完全限定包名称一样微不足道,当调用它时可以实例化您通过 JVM 参数传递的功能对象。
您的 TestExtension class 基本上会检查 JVM 参数以查找正在传递的任何自定义功能,如果找到,它会将这些功能也合并到它的功能中,然后生成浏览器。这是唯一的方法。