selenium-chromedriver - 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
添加标志的环境,如下所示:
这行得通,如果我想将“headful”作为我的默认设置,那将是完美的。
似乎--env
无法删除chromeOptions: args:
标志_
这段代码与上面类似,但是是倒置的,默认情况下--headless
在args
数组中:
这行不通。--headless
从自定义版本中排除args
.
我的结论是,基本问题是自定义args
可以添加或覆盖一个值,但排除标志不会删除它,这就是为什么即使在我的自定义环境中我也会得到无头浏览器的原因。
不过我可能是错的,很高兴得到纠正!
如果不是,则根本问题是:如何从变量chromeOptions: args:
中完全删除标志?--env
更新:在写完所有这些并查看了一些chromeDriver
文档之后,我想也许我只需要--headless
在自定义环境配置中手动设置标志,例如:
args: ["--headless=False", "--disable-gpu", "--proxy-server='direct://'", "--proxy-bypass-list=*", "--user-agent=GVCodeceptionAcceptanceWebDriver"]
可悲的是,这没有奏效。我尝试了所有我能想到的版本,但没有一个有效:
--headless=False
--headless=false
--headless=0
--headless='False'
--headless='false'
--headless='0'
如果您对我如何手动将其设置为 false 有其他想法,我全神贯注!
解决方案
推荐阅读
- windows - 使用 Selenium Powershell ISE、Windows 10 实现 Firefox 自动化
- xml - 需要动态重命名 XML 元素,然后填充后续兄弟元素值的值
- python - 通过 Lambda 函数 AWS 连接到本地数据库
- c# - 在 .NET 5 中使用 POST 和 IFormFile 在 WebApi 上添加文件
- java - 带有 netty 项目的 spring-boot 无法识别用于压缩的 .geojson 文件 mime 类型
- vue.js - 在对象数组内的元素上使用 vuelidate
- mysql - 如果它们不存在,如何将数据插入到某些列中,如果它们存在,如何使用 mysql 更新它们
- wcf - BizTalk 拆分存储过程结果
- javascript - Firefox 在处理大量对象时冻结
- vim - 如何以默认语法停止 vim 读取?