typescript - Electron 应用程序在测试执行服务器上不完全可见
问题描述
我在成功执行我的黄瓜场景时遇到了一些问题,因为由于某种未知原因,我们正在测试的电子应用程序没有完全显示(右侧缺少 1 列的表格)。出于某种原因,这只发生在我们的 Windows 测试执行服务器上,而不是我的本地笔记本电脑上。服务器分辨率为 1920x1080。测试通过 Azure DevOps Server 管道启动。
我们使用 typescript 中的 cucumber-js 框架通过 spectron 测试电子应用程序。
import * as path from 'path';
import { Application } from 'spectron';
import * as settings from './globalvars';
export const SUT = new Application({
path: `${settings.sutExecutablePath}`,
args: [path.join(__dirname, '../'), '--headless', '--window-size=1920,1080'],
env: {
RUNNING_IN_SPECTRON: true,
XXXXXX_DEV_TOOLS: false,
SPECTRON_AUTOMATION_VARS: settings.testDataIndex
},
chromeDriverArgs: ['--headless', '--window-size=1920,1080', 'resolution=1920x1080', 'resolution: 1920x1080', '--width=1920', '--height=1080'],
chromeDriverLogPath: path.join(settings.reportPath, 'chromedriver.log'),
waitTimeout: settings.spectronDefaultImplicitWaitTimeout
});
我一直在搞砸:
- 改变窗口大小
- 开始最大化
- 添加参数 wo webdriverOptions 以及 chromeDriverArgs
- ……
这些更改似乎对应用程序的启动方式没有任何影响,事实上,更改窗口大小或最大化启动它甚至对我的笔记本电脑也没有任何影响。
这是 chromedriver 日志的片段。必须编辑它,但仍然有用。
[1623923272.920][INFO]: Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
[1623923272.989][INFO]: [c56aabc7011e3a87307e2b8d55b9f003] COMMAND InitSession {
"capabilities": {
"alwaysMatch": {
"goog:chromeOptions": {
"args": [ "spectron-path=c:\\xxxx\\xxxx\\win-unpacked\\xxxxxx.exe", "spectron-arg0=C:\\git\\xxxxx\\02-sxxxx\\", "spectron-env-RUNNING_IN_SPECTRON=true", "spectron-env-xxxxx_DEV_TOOLS=false", "spectron-env-SPECTRON_AUTOMATION_VARS=C:\\git\\xxxx.xxxxxx\\automation-vars.json", "--window-size=800,600" ],
"binary": "C:\\git\\xxxx\\02-xxxxxx\\node_modules\\spectron\\lib\\launcher.bat",
"windowTypes": [ "app", "webview" ]
}
},
"firstMatch": [ {
} ]
},
"desiredCapabilities": {
"goog:chromeOptions": {
"args": [ "spectron-path=c:\\xxxxx\\xxxxxxx\\win-unpacked\\xxxxxx.exe", "spectron-arg0=C:\\git\\xxxxxx\\02-xxxxxxx\\", "spectron-env-RUNNING_IN_SPECTRON=true", "spectron-env-xxxxxxxx_DEV_TOOLS=false", "spectron-env-SPECTRON_AUTOMATION_VARS=C:\\git\\xxxxxx\\automation-vars.json", "--window-size=800,600" ],
"binary": "C:\\git\\xxxxx\\02-xxxxxxxxxxxmodules\\spectron\\lib\\launcher.bat",
"windowTypes": [ "app", "webview" ]
}
}
}
[1623923272.994][INFO]: Launching chrome: "C:\git\xxxxxxxx\02-xxxxxxx\node_modules\spectron\lib\launcher.bat" --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-blink-features=ShadowDOMV0 --enable-logging --log-level=0 --no-first-run --no-service-autorun --password-store=basic --remote-debugging-port=0 --spectron-arg0="C:\git\xxxxxxxxx\02-xxxxxxx\\" --spectron-env-running_in_spectron=true --spectron-env-xxxxx_dev_tools=false --spectron-env-spectron_automation_vars="C:\git\xxxxxxxx\automation-vars.json" --spectron-path="c:\bxxxxxxx\xxxxxxxxxx\win-unpacked\xxxxxxx.exe" --test-type=webdriver --use-mock-keychain --user-data-dir="C:\Users\xxxxx\AppData\Local\Temp\scoped_dir33580_700219467" --window-size=800,600 data:,
[1623923273.323][DEBUG]: DevTools HTTP Request: http://localhost:54323/json/version
[1623923273.637][DEBUG]: DevTools HTTP Response: {
"Browser": "Chrome/87.0.4280.141",
"Protocol-Version": "1.3",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) xxxxxxxx/1.0.0-alpha.2022 Chrome/87.0.4280.141 Electron/11.2.2 Safari/537.36",
"V8-Version": "8.7.220.31",
"WebKit-Version": "537.36 (@5236eb7c7e51a459c497e4ab474bf474ad7000ef)",
"webSocketDebuggerUrl": "ws://localhost:54323/devtools/browser/62881ab4-ea89-4b48-b75e-4234f709931b"
}
[1623923273.637][DEBUG]: DevTools HTTP Request: http://localhost:54323/json/list
[1623923273.639][DEBUG]: DevTools HTTP Response: [ {
"description": "",
"devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:54323/devtools/page/30283E47D490358108E12219527675CE",
"id": "30283E47D490358108E12219527675CE",
"title": "index.html",
"type": "page",
"url": "file:///C:/xxxxxxxxx/xxxxxxxxx/win-unpacked/resources/app.asar/build/index.html",
"webSocketDebuggerUrl": "ws://localhost:54323/devtools/page/30283E47D490358108E12219527675CE"
} ]
"test:inProgress": "node ./node_modules/cucumber/bin/cucumber-js feature-files/*.feature --format summary --format progress-bar --format node_modules/cucumber-pretty --logLevel=error --require step-definitions/**/*.ts --require-module ts-node/register --require support/*.ts --format json:../reports/02-xxxx/cucumber-report.json --format node_modules/cucumber-junit-formatter:../reports/02-xxxx/testresults.junit --format-options '{\"scenarioAsStep\":true}' --tags \"@inProgress\"",
"devDependencies": {
"@cucumber/cucumber": "^7.0.0",
"@types/chai": "^4.2.14",
"@types/cucumber": "^6.0.1",
"@types/jsonpath": "^0.2.0",
"@types/xml2js": "^0.4.8",
"@typescript-eslint/eslint-plugin": "^4.4.0",
"@typescript-eslint/parser": "^4.4.0",
"chai": "^4.2.0",
"cucumber": "^6.0.5",
"cucumber-html-reporter": "^5.3.0",
"cucumber-junit-formatter": "^0.2.2",
"cucumber-pretty": "^6.0.0",
"date-fns": "^2.21.3",
"electron": "^10.0.0",
"eslint": "^7.11.0",
"eslint-config-prettier": "^7.1.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-prettier": "^3.3.1",
"filecompare": "^1.0.4",
"jsonpath": "^1.1.0",
"prettier": "2.2.0",
"spectron": "^13.0.0",
"ts-node": "^9.1.1",
"typescript": "^4.1.3",
"xml2js": "^0.4.23"
},```
解决方案
对于将来可能遇到此问题的任何人。解决我的问题的方法非常基本。只需手动设置客户端应用程序的边界。
SUT.browserWindow.setSize(1920, 1080);
SUT.browserWindow.setPosition(0, 0);
推荐阅读
- css - 在伪元素宽度等于其父元素的文本之前
- javascript - 有没有办法从 Firestore 文档中动态检索引用类型字段?
- apex - 将额外参数从 ebs 传递到 apex
- google-cloud-platform - Terraform:如何在不锁定自己的情况下使用 iam_policy
- python - 在数据框的列中填充连续的 NAN
- redis - spring 将 redis 轮询器与事务集成
- smalltalk - 有没有特定的方法可以在 Pharo smalltalk 中获取计算机的 IP?
- dictionary - golang struct 并发读写不带锁也运行ok?
- android - 适当的地方 signOut() 方法 google api
- regex - 正则表达式:匹配模式 0 次或更多次何时有用?