首页/新闻资讯/正文详情

Selenium自动化测试在HoRain云环境的部署与实践

发布时间:2026/11/14 2:56:42 来源:云帆数科 栏目:资讯中心
Selenium自动化测试在HoRain云环境的部署与实践
1. Selenium自动化测试框架概述Selenium是一个用于Web应用程序测试的强大工具集它支持多种编程语言如Python、Java、C#等和主流浏览器Chrome、Firefox、Edge等。作为HoRain云平台推荐的自动化测试解决方案Selenium能够模拟真实用户操作实现端到端的测试流程。在HoRain云环境中使用Selenium的主要优势包括跨平台兼容性可在Windows、Linux和macOS等不同操作系统上运行多语言支持提供Python、Java等多种语言的API接口浏览器兼容性支持所有主流浏览器包括Chrome、Firefox、Safari等云集成能力与HoRain云平台深度集成便于测试任务的管理和执行2. HoRain云环境准备2.1 系统要求在HoRain云上安装Selenium前请确保满足以下基本要求操作系统Ubuntu 20.04 LTS或更高版本HoRain云推荐环境内存至少2GB RAM建议4GB以上以获得更好性能存储空间至少10GB可用磁盘空间网络连接稳定的互联网连接以下载必要的组件2.2 基础软件安装首先需要安装一些基础依赖包sudo apt-get update sudo apt-get install -y \ python3-pip \ python3-dev \ libssl-dev \ libffi-dev \ build-essential \ wget \ unzip对于Java开发者还需要安装JDKsudo apt-get install -y openjdk-11-jdk3. Selenium安装与配置3.1 Python环境安装Selenium对于Python开发者推荐使用pip安装Seleniumpip3 install selenium建议同时安装常用的测试框架pip3 install pytest unittest-xml-reporting3.2 Java环境安装Selenium对于Java项目可以通过Maven添加Selenium依赖dependency groupIdorg.seleniumhq.selenium/groupId artifactIdselenium-java/artifactId version4.1.2/version /dependency或者使用Gradleimplementation org.seleniumhq.selenium:selenium-java:4.1.23.3 浏览器驱动安装Selenium需要对应的浏览器驱动才能工作。以下是常见浏览器的驱动安装方法Chrome/Chromium驱动# 确定Chrome浏览器版本 google-chrome --version # 下载对应版本的ChromeDriver CHROME_DRIVER_VERSION$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE) wget https://chromedriver.storage.googleapis.com/${CHROME_DRIVER_VERSION}/chromedriver_linux64.zip unzip chromedriver_linux64.zip sudo mv chromedriver /usr/local/bin/ sudo chmod x /usr/local/bin/chromedriverFirefox驱动(GeckoDriver)GECKO_DRIVER_VERSIONv0.30.0 wget https://github.com/mozilla/geckodriver/releases/download/${GECKO_DRIVER_VERSION}/geckodriver-${GECKO_DRIVER_VERSION}-linux64.tar.gz tar -xvzf geckodriver-${GECKO_DRIVER_VERSION}-linux64.tar.gz sudo mv geckodriver /usr/local/bin/ sudo chmod x /usr/local/bin/geckodriver4. Selenium基础使用示例4.1 Python示例代码from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time # 初始化Chrome浏览器 options webdriver.ChromeOptions() options.add_argument(--headless) # 无头模式适合HoRain云环境 options.add_argument(--no-sandbox) options.add_argument(--disable-dev-shm-usage) driver webdriver.Chrome(optionsoptions) try: # 访问测试页面 driver.get(https://www.horain.cloud) # 查找元素并交互 search_box driver.find_element(By.NAME, q) search_box.send_keys(Selenium测试) search_box.send_keys(Keys.RETURN) # 等待结果加载 time.sleep(2) # 获取页面标题 print(页面标题:, driver.title) # 截图保存 driver.save_screenshot(search_results.png) finally: # 关闭浏览器 driver.quit()4.2 Java示例代码import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class HoRainSeleniumTest { public static void main(String[] args) { // 设置ChromeDriver路径 System.setProperty(webdriver.chrome.driver, /usr/local/bin/chromedriver); // 配置Chrome选项 ChromeOptions options new ChromeOptions(); options.addArguments(--headless); options.addArguments(--no-sandbox); options.addArguments(--disable-dev-shm-usage); WebDriver driver new ChromeDriver(options); try { // 访问测试页面 driver.get(https://www.horain.cloud); // 查找元素并交互 WebElement searchBox driver.findElement(By.name(q)); searchBox.sendKeys(Selenium测试); searchBox.submit(); // 等待结果加载 Thread.sleep(2000); // 获取页面标题 System.out.println(页面标题: driver.getTitle()); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭浏览器 driver.quit(); } } }5. HoRain云上的高级配置5.1 使用远程WebDriver在HoRain云环境中可以配置Selenium Grid实现分布式测试from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities # 连接到远程WebDriver driver webdriver.Remote( command_executorhttp://horain-grid-server:4444/wd/hub, desired_capabilitiesDesiredCapabilities.CHROME )5.2 性能优化配置针对HoRain云环境优化Selenium性能options webdriver.ChromeOptions() options.add_argument(--headless) options.add_argument(--no-sandbox) options.add_argument(--disable-gpu) options.add_argument(--disable-dev-shm-usage) options.add_argument(--window-size1920,1080) # 禁用图片加载提升速度 prefs {profile.managed_default_content_settings.images: 2} options.add_experimental_option(prefs, prefs) driver webdriver.Chrome(optionsoptions)5.3 测试报告生成集成Allure生成美观的测试报告pip install allure-pytest在pytest.ini中配置[pytest] addopts --alluredir./allure-results6. 常见问题与解决方案6.1 浏览器驱动版本不匹配错误现象SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version XX解决方案检查已安装的Chrome浏览器版本下载对应版本的ChromeDriver更新驱动路径google-chrome --version # 根据输出下载对应版本的ChromeDriver6.2 元素定位失败错误现象NoSuchElementException: Message: no such element: Unable to locate element解决方案增加显式等待使用更稳定的定位策略检查iframe嵌套from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, element-id)) )6.3 内存不足问题错误现象WebDriverException: Message: unknown error: session deleted because of page crash解决方案增加HoRain云实例的内存配置添加Chrome选项减少内存使用options.add_argument(--disable-dev-shm-usage) options.add_argument(--no-sandbox)7. 最佳实践与性能优化7.1 测试脚本组织建议使用Page Object模式设计测试用例将定位器与操作逻辑分离实现基础测试类封装公共方法class BasePage: def __init__(self, driver): self.driver driver def find(self, *locator): return self.driver.find_element(*locator) def click(self, *locator): self.find(*locator).click() class LoginPage(BasePage): USERNAME (By.ID, username) PASSWORD (By.ID, password) SUBMIT (By.ID, submit) def login(self, username, password): self.find(*self.USERNAME).send_keys(username) self.find(*self.PASSWORD).send_keys(password) self.click(*self.SUBMIT)7.2 并行测试执行利用HoRain云的资源实现并行测试import pytest from selenium import webdriver pytest.fixture(params[chrome, firefox]) def driver(request): if request.param chrome: options webdriver.ChromeOptions() driver webdriver.Chrome(optionsoptions) elif request.param firefox: driver webdriver.Firefox() yield driver driver.quit() def test_horain_search(driver): driver.get(https://www.horain.cloud) assert HoRain in driver.title7.3 CI/CD集成将Selenium测试集成到HoRain云的CI/CD流程中# .horain-pipeline.yml stages: - test selenium_test: stage: test image: python:3.9 services: - horain/chrome-node:latest script: - pip install -r requirements.txt - pytest --alluredirallure-results artifacts: paths: - allure-results/8. 安全注意事项在HoRain云上使用Selenium时需要注意以下安全事项凭证管理不要将敏感信息硬编码在测试脚本中使用HoRain云的密钥管理服务访问控制限制Selenium Grid的访问权限仅允许授权IP访问资源清理确保测试完成后正确关闭浏览器实例避免资源泄漏测试隔离为每个测试用例创建独立的浏览器会话防止测试间相互影响# 使用环境变量管理敏感信息 import os from dotenv import load_dotenv load_dotenv() TEST_USER os.getenv(TEST_USER) TEST_PASS os.getenv(TEST_PASS)

相关推荐

OpenRig开源绑定框架:让角色绑定流程标准化与资产复用
OpenRig开源绑定框架:让角色绑定流程标准化与资产复用

1. 为什么动画团队需要一套“开源绑定框架”入行十三年,熬过无数个绑定的深夜之后,我愈发认定一个结论:绑定这个环节的产出效率,直接决定一个动画项目能走多快、能走多远。OpenRig 这类开源绑定框架,正好戳中这个痛点—… · 2026/11/4 21:45:06

FunASR实时语音识别Websocket接口部署与优化
FunASR实时语音识别Websocket接口部署与优化

1. 项目概述:FunASR实时语音识别Websocket接口部署去年在为一个跨国视频会议项目做技术支持时,客户要求实现实时双语字幕功能。当时测试了多个开源方案后,最终选择了FunASR作为核心引擎。这个基于Paraformer架构的语音识别系统,在… · 2026/11/12 10:02:59

数论进阶:模运算与二次剩余深度解析
数论进阶:模运算与二次剩余深度解析

1. 数论进阶:从基础到深入的探索数论作为数学中最古老的分支之一,研究整数的性质及其相互关系。这本《数论探微:进阶版》面向已经掌握初等数论知识的读者,旨在带领大家深入理解模运算、二次剩余、原根等核心概念。不同于入门教材&… · 2026/11/12 14:47:21

黄山考电工证报名地点怎么报名?别被中介坑了
黄山考电工证报名地点怎么报名?别被中介坑了

黄山考电工证报名地点怎么报名?别被中介坑了 你是不是也在为“黄山考电工证报名地点怎么报名”发愁?网上信息太多,真假难辨,稍不注意就被中介坑了钱还拿不到证。别慌,这篇讲的是黄山地区电工证报名的干货,带你一步步避开陷阱,顺利拿证。… · 2026/11/14 2:55:55

在宣汉哪里能办电工证良心建议全流程避坑指南
在宣汉哪里能办电工证良心建议全流程避坑指南

在宣汉哪里能办电工证良心建议全流程避坑指南 怕考不过白交培训费?别急,我从业这么多年,见过太多人因为流程不清、机构不靠谱,花了钱却拿不到证,白白浪费时间和金钱。今天我用 良心建议… · 2026/11/14 2:55:55

低压电工证复审考试题库app怎么用?电子证书过期还能不能延期
低压电工证复审考试题库app怎么用?电子证书过期还能不能延期

低压电工证复审考试题库app怎么用?电子证书过期还能不能延期 证书过期了不知道怎么复审延期?低压电工证复审考试题库app成了很多电工朋友的“救命稻草”。但很多人对复审流程和电子证书的管理一知半解,一不小心就错过了复审时间,导致证书失效,影响… · 2026/11/14 2:55:55

电工证可以跨市考吗网上查询最新政策解读
电工证可以跨市考吗网上查询最新政策解读

电工证可以跨市考吗网上查询最新政策解读 工地太忙根本没时间复习考试,你是施工队的老王,手头活儿干不完,哪还有精力去备考?可这电工证到期了,要是不及时复审或报考,怕是连项目都接不了。别急,咱今天就来聊聊【电工证可以跨市考吗】这个事儿,帮你把这… · 2026/11/14 2:55:55

青岛电工证如何报名 上岗必备的考试攻略来了
青岛电工证如何报名 上岗必备的考试攻略来了

青岛电工证如何报名 上岗必备的考试攻略来了 工地太忙根本没时间复习考试,尤其是像你这种刚毕业的工程类学生,刚上工地就被安排得满满当当,哪还有空去复习电工证的考试内容?别急,今天就给你整一套 上岗必备… · 2026/11/14 2:55:55

昭通鲁甸县低压电工证官方回应实操考试心里没底怕挂科
昭通鲁甸县低压电工证官方回应实操考试心里没底怕挂科

昭通鲁甸县低压电工证官方回应实操考试心里没底怕挂科 你是不是也在担心昭通鲁甸县低压电工证的实操考试?怕自己手生、操作不规范、考试挂科?这事儿我懂,我当初报考时也这么想,现在回头看,其实只要准备得当,考试真没那么可怕。今天我就结合昭通鲁甸县低… · 2026/11/14 2:54:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/13 22:30:50

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43

有初级电工证怎么工作 2026河南最新政策怎么应对
有初级电工证怎么工作 2026河南最新政策怎么应对

有初级电工证怎么工作 2026河南最新政策怎么应对 之前考的证在外省能不能转过来?这个问题我每天被问上百次。2026年河南最新政策对证书跨省转移有了明确说明,特别是南阳市的从业者,需要特别关注。… · 2026/11/14 0:00:31

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略
电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 证书过期了不知道怎么复审延期?很多人遇到这种情况,要么是工作太忙没时间处理,要么是不知道具体流程,导致证书失效,影响工作和项目进展。其实复审并不难,关键是要找准官方报名入口,掌… · 2026/11/14 0:00:31

为什么要低压电工证实操考试考什么
为什么要低压电工证实操考试考什么

为什么低压电工证值不值得考?别再被中介骗了 你是不是也经常看到网上有人在问“低压电工证到底值不值得考”?或者在找报名点时,担心被中间人骗钱?这些问题,我懂,我也经历过。作为一名在应急管理行业摸爬滚打多年的从业者,我深知低压电工证不仅是一个从… · 2026/11/14 0:00:31

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 22:31:30

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码