【UI自动化测试】selenium操作补充
🏡个人主页:謬熙,欢迎各位大佬到访❤️❤️❤️~
👲个人简介:本人编程小白,正在学习互联网求职知识……
如果您觉得本文对您有帮助的话,记得点赞👍、收藏⭐️、评论💬,如果文章有什么需要改进的地方还请大佬不吝赐教🙏🙏🙏
WebDriver相关
WebElement相关
特殊元素操作
处理弹框
凡是通过 JS 实现的系统弹窗(警告框、确认框、提示框), ⽆法通过⿏标右键检查选项获取元素信息。
Alert alert = driver.switchTo().alert();
getText()
获取文本信息accept()
确认dismiss()
取消iframe处理
frame是html的框架,所谓框架就是可以在同一个页面显示不止一个区域,iframe多用于嵌套页面。最常见的就是登录窗口了。
driver.switchTo().frame(id、name、index、WebElement);
切换完之后再查找默认界面的元素时需要再切换回去。window多网页窗口处理
用于切换窗口
浏览器打开新的页面时,如果不切换句柄将还是在默认页面,想查询新页面需要把句柄切换到这个窗口下
select下拉框
JS脚本处理
去除仅可读的属性,以免手动输入
鼠标操作
Actions actions = new Actions(driver);
- 移动鼠标到某个元素上:
actions.moveToElement(element).perform();
- 点击某个元素:
actions.click(element).perform();
- 双击某个元素:
actions.doubleClick(element).perform();
- 右键点击某个元素:
actions.contextClick(element).perform();
- 拖拽元素:
actions.dragAndDrop(sourceElement, targetElement).perform();
- 按下鼠标左键:
actions.clickAndHold(element).perform();
键盘操作
以下是Selenium中常用的键盘操作方法:
sendKeys(Keys.ENTER)
:模拟按下Enter键.sendKeys(Keys.TAB)
:模拟按下Tab键,用于在表单元素之间切换焦点.sendKeys(Keys.BACK_SPACE)
:模拟按下Back Space键,用于删除字符.sendKeys(Keys.DELETE)
:模拟按下Delete键,用于删除字符.sendKeys(Keys.ESCAPE)
:模拟按下Esc键,用于退出当前操作或关闭弹窗等.sendKeys(Keys.SPACE)
:模拟按下空格键.sendKeys(Keys.SHIFT, "text")
:模拟按下Shift键并输入文本,用于输入大写字母或特殊字符.sendKeys(Keys.CONTROL, "a")
:模拟按下Ctrl+A组合键,用于全选文本.sendKeys(Keys.CONTROL, "c")
:模拟按下Ctrl+C组合键,用于复制选中的文本.sendKeys(Keys.CONTROL, "v")
:模拟按下Ctrl+V组合键,用于粘贴文本.sendKeys(Keys.ALT, "f")
:模拟按下Alt+F组合键,用于打开浏览器菜单等.sendKeys(Keys.ARROW_UP)
:模拟按下向上箭头键,用于在列表或文本框中向上移动光标.sendKeys(Keys.ARROW_DOWN)
:模拟按下向下箭头键,用于在列表或文本框中向下移动光标.sendKeys(Keys.ARROW_LEFT)
:模拟按下向左箭头键,用于在文本框中向左移动光标.sendKeys(Keys.ARROW_RIGHT)
:模拟按下向右箭头键,用于在文本框中向右移动光标.
文件上传
验证码
- 去掉验证码[常⽤]: 测试环境下采⽤
- 设置万能验证码[常⽤]: ⽣产环境和测试环境下采⽤, 必须注意保密不要外泄万能验证码
- 验证码识别技术: 通过 Python-tesseract 来识别图⽚类型验证码;识别率很难达到 100%
- 记录 cookie: 通过记录 cookie 进⾏跳过登录, 不能对登陆本身功能进⾏ 测试时使⽤
等待
1.傻等
暂停线程一段时间后,继续执行后续代码,可以使用
Thread.sleep
/TimeUnit.SECONDS.sleep
的方式让当前线程暂停执行,二者都可以实现,并无差异。待休眠时间结束,线程可以继续执行。
两者区别
Thread.sleep()
是java.lang
包下的类方法,接收的参数单位是毫秒,若需要让当前线程暂停执行秒,分钟,小时等,需要手动根据毫秒单位来换算;TimeUnit.SECONDS.sleep()
是java.util.concurrent
包下的类方法,底层调用的依旧是Thread.sleep()
,是对该方法的包装,多了时间单位转换和验证。2. 隐式等待
在后续的所有元素查找操作中,如果元素没有立即出现,WebDriver 将在 一段时间内不断轮询页面,直到找到元素或者超时。
//隐式等待调用方式,设置等待时间为5秒
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
3. 显示等待
显式等待是针对特定条件进行等待,它明确指定要等待的条件和最长等待时间。只有当特定条件满足时,代码才会继续执行。
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
//设置5秒的最大等待时间,等待(By.tag_NAME,"title")这个元素被点击
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(5));
wait.unitl(ExpectedConditions.elementToBClickable(By.tagName("title")));