【问题标题】:passing ChromeOptions without instantiating new WebDriver传递 ChromeOptions 而不实例化新的 WebDriver
【发布时间】:2023-04-02 01:14:01
【问题描述】:

我正在尝试将 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(options) 更改为只传递这些选项的东西?谢谢!

【问题讨论】:

  • 您必须在代码中的其他位置调用new ChromeDriver()。在哪里?
  • @SiKing 正确,我们使用一个单独的类 TestExtension 来处理所有的初步设置、浏览器堆栈参数等。这是它被实例化的地方。但是我不想改变它..
  • 每次调用new ...Driver(),都会打开一个新的浏览器。这就是 Selenium 的工作原理!
  • @SiKing 我知道这一点,这就是为什么我试图找到一种方法来传递这些选项......就像有一种方法可以做 driver.addOptions() 或其他东西而不是使用传入的选项创建一个新驱动程序。
  • 这些选项在启动时传递给浏览器。 Selenium 与这些无关。

标签: java selenium webdriver testng chrome-options


【解决方案1】:

如果不更改 TestExtension 类,您将无法做到这一点。原因是您传递的任何参数都会传递给实例化时生成的浏览器。在那之后,就没有办法改变任何东西来改变生成的浏览器的行为了。您需要更改您的 TestExtension 类,然后提供一种机制,其中用户基本上也可以注入他们自己的功能,TestExtension 在生成浏览器之前会考虑这一点。它可以像传入类的完全限定包名一样简单,调用时可以实例化您通过 JVM 参数传递的功能对象。

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

【讨论】:

  • 这是我害怕的,但我知道这很可能是唯一的方法......哦,好吧,值得一问。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多