CI/CD 上的 Python+Selenium 自动测试找不到它们在本地运行时找到的元素

Python+Selenium autotests on CI/CD don't find elements that they find when running locally

提问人:DandyCat 提问时间:11/17/2023 更新时间:11/17/2023 访问量:15

问:

我非常需要你的帮助!我在 Gitlab CI\CD 中使用 Selenium+python+pytest 编写了自动测试。将 Chrome 和相应的 Chrome 驱动程序更新到版本 119 后,自动测试开始对某些元素产生 TimeoutExceptionNoSuchElementException 等错误。它发现的一些元素没有任何问题。但是当我在计算机上本地运行这些相同的测试时,网络驱动程序会找到所有元素。也许这是在 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

我试过了:

  1. 要更改 CSS 选择器,
  2. 要逐个删除 chrome 驱动程序选项,
  3. 以增加页面加载的等待时间。 没有任何帮助。页面上的任何元素都不应重叠。测试在 Gitlab CI\CD 上的 Chrome 版本 118 中正常运行。当我在计算机上本地运行 Chrome 119 测试时,测试可以正常工作。 使用脚本提取页面结构可能是值得的
with open("page2.html", "wt", encoding="utf-8") as file:
    file.write(driver.page_source)

放入文件并查看它。我尝试过,但无法将其写入 Gitlab 上的文件中。 为什么 Selenium 在页面上看不到某些元素?

python selenium-webdriver selenium-chromedriver cicd nosuchelementexception

评论


答:

0赞 DandyCat 11/23/2023 #1

问题是,在更新Chrome之后,页面开始以移动设备模式显示。您需要使用所需的分辨率注册 Web 驱动程序选项。

options.add_argument("--window-size=1920,1080")