(个人见解,仅供参考)

 🔥个人主页:寻星探路

🎬作者简介:Java研发方向学习者

📖个人专栏:JAVA(SE)----如此简单 从青铜到王者,就差这讲数据结构!!数据库那些事!!JavaEE 初阶启程记:跟我走不踩坑测试开发漫谈

⭐️人生格言:没有人生来就会编程,但我生来倔强!!!



目录

1. 工作原理:

2. 适用场景

3. 关键操作 API(高频使用)

4. 切换窗口操作

5. 常见弹窗

6. 显示等待和隐式等待的区别,你在实际中是如何选择的

7. 动态元素如何定位

8. UI 自动化查找元素的方法

9. 描述selenium实现自动化测试的流程

10. 自动化元素查找失败的原因有哪些?


        Selenium 是Web 端自动化测试的核心工具,专门用于模拟人工操作浏览器(如点击、输入、跳转),验证 Web 应用功能是否符合预期,核心价值是 “替代重复手工测试,提升回归测试效率”。

1. 工作原理:

Selenium 不直接操作浏览器,而是通过 “中间桥梁” 实现控制,流程如下:

  1. 测试人员编写脚本(如 Java 代码),调用 Selenium API(如click()点击);

  2. WebDriver(驱动浏览器执行自动化操作,是测试工作的核心) 接收 API 请求,将其转换为浏览器能识别的指令(如 HTTP 请求);

  3. 浏览器驱动(如 ChromeDriver,需与浏览器版本匹配)接收指令,驱动浏览器执行对应操作;

  4. 浏览器执行后,将结果通过驱动→WebDriver→脚本返回,脚本完成断言(验证结果)。

2. 适用场景

  • 回归测试:重复执行的核心流程(如登录、下单、注册);

  • 跨浏览器兼容性测试:同一脚本在多浏览器验证功能一致性;

  • 大量数据验证:如批量输入测试、数据查询结果校验。

3. 关键操作 API(高频使用)

  • 元素定位(核心):By.ID、By.XPATH、By.CSS_SELECTOR、By.NAME、By.LINK_TEXT(链接文本);

  • 页面操作send_keys()(模拟按键输入)、click()(点击)、clear()(清空)、getTest()(获取文本信息)、get_attribute()(获取元素属性);

  • 页面控制back()(后退)、forward()(前进)、refresh()(刷新)、maximize_window()(最大化);

  • 等待机制(必用):

    • 隐式等待:driver.implicitly_wait(10)(隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就一直生效);

    • 显式等待:WebDriverWait(针对性等待某个元素,更灵活稳定);

    • 强制等待:Thread.sleep()
  • 弹窗处理driver.switch_to.alert.accept()(确认弹窗)、dismiss()(取消);

  • iframe 切换driver.switch_to.frame("iframe-id")(页面嵌套 iframe 时,需切换才能操作内部元素)。

4. 切换窗口操作

//获取当前界面句柄
String curWindow = driver.getWindowHandle();
//获取所有界面句柄
Set<String> allWindows = driver.getWindowHandles();
for (String win : allWindows) {
    if (!win.equals(curWindow)) {
        //切换窗口
        driver.switchTo().window(win);
    }
}

5. 常见弹窗

  1. 警告弹窗

  2. 确认弹窗

//把 Selenium 的操作焦点从 “网页页面” 切换到 “浏览器原生弹窗” 上。
Alert alert = driver.switchTo.alert(); 
//确认 
alert.accept() 
//取消 
alert.dismiss()  
  1. 提示弹窗

Alert alert = driver.switchTo.alert(); 
alert.sendKeys("hello"); 
//确认
alert.accept(); 
//取消
alert.dismiss(); 

6. 显示等待和隐式等待的区别,你在实际中是如何选择的

核心区别

        隐式等待:全局、只等元素 “在代码里存在”(哪怕看不见 / 点不了),灵活低;

        显示等待:局部、等元素 “能点击 / 可见”,满足就停,精准高。

实际选择

        优先用显示等,适配按钮、动态加载,防用例失败;

        简单页面设 3-5 秒隐式等兜底,绝不混用。

        混用显式 + 隐式等待,会导致实际等待时间不可控(比如隐式设 10 秒、显式设 5 秒,实际可能等 10 秒),还会让超时逻辑混乱,容易出现 “该超时不超时、不该超时却超时” 的问题,所以实际中绝对不混用。

        比如我设置隐式等待 10 秒,又给 “登录按钮” 加了显式等待 5 秒(等可点击)

        实际执行时,隐式等待会先 “占着时间”:如果按钮 5 秒时已经可点击,但隐式等待还在轮询(没到 10 秒),显式等待的判定会被干扰,最终可能实际等了 10 秒才返回 —— 既浪费时间,又让超时逻辑完全乱了,用例的执行时长和稳定性都会出问题。

7. 动态元素如何定位

  • 相对路径替代绝对路径(避免出现易变路径);

  • 借助contains()匹配固定属性片段(如//input[contains(@id,'user_')],应对id="user_123"这类动态 ID);

  • 结合文本或父元素定位(如//button[text()='提交'],文本通常比属性更稳定)

8. UI 自动化查找元素的方法

一、核心定位方式(按优先级/稳定性)

  1. ID/Name:优先选,基于唯一属性,稳定且高效(Name需确认唯一性);

  2. XPath/CSS选择器:灵活性最高,主流推荐(CSS执行效率更高);

    1. 核心用法:属性匹配、层级匹配;

  3. 特殊场景

    1. Web端<a>标签:链接文本(LINK_TEXT/模糊匹配PARTIAL_LINK_TEXT);

    2. 移动端(Appium):accessibility_id(安卓content-desc/苹果label)、android_uiautomator。

二、关键技巧

  1. 优先“唯一、稳定”属性,避免绝对XPath(如/html/body/div[1]);

  2. 动态元素:用contains/starts-with模糊匹配(如//div[starts-with(@id, 'btn_')]);

  3. 无唯一属性:通过父/子节点层级定位(如//div[@class='form']/input);

  4. 组合属性提升唯一性(如//input[@name='tel' and @type='number'])。

三、核心注意

  1. 优先级:ID > 自定义属性 > XPath/CSS(属性组合) > 文本/索引(慎用);

  2. 结合显式等待(如WebDriverWait),避免元素未加载报错。

9. 描述selenium实现自动化测试的流程

  • 确定需要覆盖的页面并编写对应的测试用例

  • 以页面为基准拆分用例,每个页面的用例单独存到一个文件夹的包下面。方便用例的管理

  • 将创建驱动、截图等通用功能进行单独封装,保证实例仅创建一次

  • 然后基于测试用例结合封装的通用功能编写自动化脚本

  • 添加等待逻辑,避免页面渲染慢(网慢,找不到元素)而导致的错误

  • 执行自动化测试脚本

10. 自动化元素查找失败的原因有哪些?

1)元素定位方式写错了,如cssSelector写成了xpath

2)元素写错了,xpath或者cssSelector写错了

3)页面加载速度慢,代码中未添加等待

4)打开了新的标签页,未执行切换窗口操作

5)页面出现了异常,如警告/确认/提示弹窗未处理导致无法定位页面元素

6)要定位的元素为动态元素,每次打开对应的元素名不一样

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐