提问人:DandyCat 提问时间:11/17/2023 更新时间:11/17/2023 访问量:15
CI/CD 上的 Python+Selenium 自动测试找不到它们在本地运行时找到的元素
Python+Selenium autotests on CI/CD don't find elements that they find when running locally
问:
我非常需要你的帮助!我在 Gitlab CI\CD 中使用 Selenium+python+pytest 编写了自动测试。将 Chrome 和相应的 Chrome 驱动程序更新到版本 119 后,自动测试开始对某些元素产生 TimeoutException 或 NoSuchElementException 等错误。它发现的一些元素没有任何问题。但是当我在计算机上本地运行这些相同的测试时,网络驱动程序会找到所有元素。也许这是在 CI\CD 的文件中传递给 Chromedriver conftest.py 选项的问题。它看起来像:
def driver() -> WebDriver:
print("\nStart browser for test..")
options=Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-gpu')
options.add_argument('--disable-browser-side-navigation')
options.add_argument('--disable-infobars')
options.add_argument('--disable-extensions')
options.add_argument('--start-maximized')
options.add_argument('--disable-notifications')
options.add_argument('--disable-translate')
browser = webdriver.Remote(
command_executor='http://selenium__standalone-chrome:4444/wd/hub',
options=options)
yield browser
print("\nQuit browser")
browser.quit()
除了“--icognito”之外,我没有任何本地测试选项。 我的 yml 文件到 Gitlab 看起来像:
image: python:3.11.4
default:
tags:
- almalinux8
- common
- dev-runner05
- devops
- docker
stages:
- test_Datateh
Datateh test:
stage: test_Datateh
extends: .job_template
script:
- pytest -s -v --tb=native Autotests/Sales/test_Datatech.py
.job_template:
services:
- selenium/standalone-chrome
before_script:
- pip install --upgrade pip
- pip install -r requirements.txt
使用要求:
pytest==7.4.3
selenium==4.15.0
urllib3==2.1.0
我试过了:
- 要更改 CSS 选择器,
- 要逐个删除 chrome 驱动程序选项,
- 以增加页面加载的等待时间。 没有任何帮助。页面上的任何元素都不应重叠。测试在 Gitlab CI\CD 上的 Chrome 版本 118 中正常运行。当我在计算机上本地运行 Chrome 119 测试时,测试可以正常工作。 使用脚本提取页面结构可能是值得的
with open("page2.html", "wt", encoding="utf-8") as file:
file.write(driver.page_source)
放入文件并查看它。我尝试过,但无法将其写入 Gitlab 上的文件中。 为什么 Selenium 在页面上看不到某些元素?
答:
0赞
DandyCat
11/23/2023
#1
问题是,在更新Chrome之后,页面开始以移动设备模式显示。您需要使用所需的分辨率注册 Web 驱动程序选项。
options.add_argument("--window-size=1920,1080")
评论