一.了解自动化和selenium
1.什么是自动化?
自动化测试能够代替一部分手工测试,能够提高测试效率。
随着功能的增加,版本越来越多,版本回归的压力越来越大,仅仅通过手工回归所有版本是不现实的,需要借助自动化回归。
2.为什么选择selenium作为web自动化工具?
1)支持多浏览器
2)支持多系统(Linux,IOS,Windows等)
3)支持多种语言 (Java,C++,python等)
4)selenium有很多底层API
5)开源免费
3.什么是驱动?什么的驱动的基本原理?
需要驱动才能打开浏览器。人工测试时,人工手动驱动来打开浏览器;自动化测试时,代码不能直接打开浏览器,需要借助驱动程序打开浏览器。
但是,代码可以驱使驱动打开浏览器。
驱动原理:
二.selenium的基础语法
1.元素的定位
定位页面元素:driver.findElement()
抽象类By中的方法:By.cssSelector(); By.xpath();By.id()等
定位元素的方法:
css或者xpath等复制时按F12后点击页面对应位置,在代码段中选择相应选择器copy即可
css选择器
xpath选择器
2.元素的操作
点击:click ()
提交:submit()
(可以click但不一定可以submit,但是页面中的任何元素都可以click。)
模拟按键输入:sendKeys()
清除对象输入的文本内容:clear()
获取文本:getText()
获取属性值:getAttribute()
3.等待
代码执行效率比较快,而前端页面渲染比较慢,可能代码已经执行到下一步,前端却还没有渲染完成,从而导致元素找不到。
强制等待:Thread.sleep(3000);
等待时间需要进行估计。
优点:写法简单,适合调试使用。
缺点:使用自动化测试就是为了提高调试效率,但是强制等待需要等待固定的时间,那么调试效率就会大大减小。
隐式等待:driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
隐式等待作用在driver争个生命周期。
在规定时间范围内,轮询等待元素出现之后就结束等待,如果在规定范围内,元素都没有出现,就会抛出noSuchElement()异常。
优点:节约了大量等待时间,元素渲染完成就会执行下一步,提高了效率。
缺点:需要等待所有的元素都渲染完毕才会执行下一步,仍然会有时间的浪费。
显式等待:WebDriverWait(driver,Duration.ofSeconds(3));
等待特定元素进行测试。第一个对象表示等待对象,第二个对象表示强制等待时间。
优点:强制等待一个元素,大大降低了等待全部元素的时间。
缺点:写法复杂。
4.信息打印
1)打印标题 getTitle()
2)打印当前链接 getCurrentUrl()
5.窗口
1)获取当前页面的句柄 getWindowHandle()
2)获取当前所有页面的句柄 getWindowHandles()
特别地:(本次测试用例为https:\\baidu.com\下进行)
由上述可知,在进入百度页面后,无论操作与否打印的句柄都为百度页。要想打印打开的所有页面的句柄时,需要使用getWindowHandles()。
注:跳转页面时选择在everyWindows中挑选所需要的页面
3)跳转页面 switchTo().window(window)
4)窗口大小设置
最大化 driver.manage().window().maximize();
最小化 driver.manage().window().minimize();
设置指定尺寸 driver.manage().window().setSize(new Dimension(1000,800));
6.导航
1)前进 driver.navigate().forward();
2)后退 driver.navigate().back();
7.弹窗
找到弹窗关闭按钮所在位置,然后点击即可。
1)警告弹窗 不能找到关闭位置时
切换到警告弹窗 Alert alert = driver.switchTo().alert();
点击弹窗上确认按钮 alert.accept();
点击弹窗上取消按钮 alert.dismiss();
2)提示弹窗 需要输入内容
切换到输入弹窗 Alert alert = driver.switchTo().alert();
输入内容 alert.sendKeys();
8.鼠标,键盘操作
找到对应位置,然后点击。
1)鼠标操作
移动到指定位置 使用Actions接口
perfrom() 表示演示。
2)键盘操作
移动到指定位置
9.选择框
1)直接通过元素定位
2)使用Select接口
索引selectByIndex()是从0开始计数
通过value值selectByValue()
通过可见文本值selectByVisibleText()
10.文件上传
页面中点击文件上传会弹出系统窗口,selenium不能操作系统窗口。
通过sendKeys()方法输入需要上传文件的路径和文件名,从而达到上传的目的。
11.屏幕截图
截屏:File srcFile = driver.getScreenshotAs(OutputType.x);
x可以选择:FILE,BASE64,BYTES
创建一个文件:File fileName = new File("./src/test/autoPic/my.png");
将截屏图片保存到新创建文件中:FileUtils.copyFile(srcFile,fileName);