我有一个Vue.js
应用程序,我想为它编写硒测试。当我针对部署的应用程序生产版本运行测试时,测试通过,但在针对本地版本运行时失败。
当然,当在本地运行时,Vue.js
应用程序不是从构建中运行的,而是使用npm run serve
运行的。
我在本地有以下docker compose
设置:
app:
build:
context: .
dockerfile: ./app.dockerfile
image: app
command: npm run serve
ports:
- 8080:8080
volumes:
- ./app:/app
selenium:
image: selenium/standalone-chrome:91.0
depends_on:
- app
e2e-tests:
build:
context: .
dockerfile: ./e2e_tests.dockerfile
image: e2e-tests
command: poetry run python ./foo.py
depends_on:
- app
- selenium
volumes:
- ./e2e_tests:/app
以下是一个使用e2e-tests
和selenium
容器在互联网上测试已部署的应用程序生产版本的基本测试:
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--window-size=1420,1080")
chrome_options.add_argument("--headless")
driver = webdriver.Remote("http://selenium:4444/wd/hub", options=chrome_options)
driver.get('https://www.example.com')
try:
assert 'My app title' in driver.title
except AssertionError:
print('invalid title')
driver.quit()
如果我现在将上面的测试更改为使用app
容器,它只是Vue应用程序的本地运行版本,它会失败,因为标题是空的:
driver.get('http://app:8080')
我试着在driver.get
之后添加一个10秒的wait
到测试中,但标题仍然是空的。
尽管我可以通过浏览器访问该应用程序,但当selenium试图从docker中调用它时,该应用程序返回了Invalid Host Header
。一定是一些与码头工人有关的特质。
解决方案是更新我的vue.config.js
如下:
module.exports = {
devServer: {
disableHostCheck: true
}
};
disableHostCheck
解决了这个问题。显然,这只应该在开发中使用,因为如果在生产中启用,会有安全风险。