首页 > 解决方案 > Codeception:通过 --env 标志禁用单个 chromeOptions 参数(以拥有非无头环境)

问题描述

这既是关于一个特定问题(通过标志将非无头浏览器作为选项),也是一个更普遍的潜在问题(覆盖via--env的特定标志)。我给出了具体问题的背景,以帮助澄清潜在问题。chromeOptions: args:--env

目标:用于--env headful按需加载非无头 chromeDriver。

我想要的是让我的WebDriver套件设置为--headless默认将标志传递到 ChromeDriver 配置中,因为通常我不想看到浏览器放大。

但是当我编写/调试测试时,我希望能够->pause()等等,所以我想传入--env headful并覆盖特定的 ChromeDriver 配置。

到目前为止,我一直在编辑我的套件配置以注释掉不同版本的capabilities: chromeOptions: args:数组:

capabilities:
    chromeOptions:
        # Headless - Don't open Chrome window
        args: ["--headless", "--disable-gpu", "--proxy-server='direct://'", "--proxy-bypass-list=*", "--user-agent=GVCodeceptionAcceptanceWebDriver"]
        # Not-Headless - Chrome opens and you watch
        # args: ["--disable-gpu", "--proxy-server='direct://'", "--proxy-bypass-list=*", "--user-agent=GVCodeceptionAcceptanceWebDriver"]

这是有效的,因为我完全替换了数组。显然这很糟糕,因为编辑它很乏味,而且我冒着在 Git 中提交错误版本的风险。

“环境”(--env)系统应该解决这个问题,但它只在一个方向上起作用

环境允许您键入--env和触发一组不同的配置值,所有这些值都方便地存储在套件的 YML 文件中。

我得到了那个工作,甚至用它来控制--headless旗帜,但只在一个方向!

如果我将默认设置为非无头(“有头”),那么我可以有一个名为headless添加标志的环境,如下所示:

具有 --env 无头的配置屏幕截图

这行得通,如果我想将“headful”作为我的默认设置,那将是完美的。

似乎--env无法删除chromeOptions: args:标志_

这段代码与上面类似,但是是倒置的,默认情况下--headlessargs数组中:

在此处输入图像描述

这行不通。--headless从自定义版本中排除args.

我的结论是,基本问题是自定义args可以添加或覆盖一个值,但排除标志不会删除它,这就是为什么即使在我的自定义环境中我也会得到无头浏览器的原因。

不过我可能是错的,很高兴得到纠正!

如果不是,则根本问题是:如何从变量chromeOptions: args:中完全删除标志?--env

更新:在写完所有这些并查看了一些chromeDriver文档之后,我想也许我只需要--headless在自定义环境配置中手动设置标志,例如:

 args: ["--headless=False", "--disable-gpu", "--proxy-server='direct://'", "--proxy-bypass-list=*", "--user-agent=GVCodeceptionAcceptanceWebDriver"]

可悲的是,这没有奏效。我尝试了所有我能想到的版本,但没有一个有效:

如果您对我如何手动将其设置为 false 有其他想法,我全神贯注!

标签: selenium-chromedrivercodeceptionacceptance-testing

解决方案


推荐阅读