用selenium4 webdriver + java 搭建并完成第一个自动化测试脚本
自动化测试任务:
百度搜索自己的姓名。点击第一个链接(或者第二个),在新的页面上,添加断言,验证你的名字是否存在。
实验资料百度网盘下载路径:
链接: https://pan.baidu.com/s/1nVlHX_ivresul9Thg6Cvjw?pwd=2ydd 提取码: 2ydd
1.新建一个java工程
打开eclipse,点击菜单 File -> New -> Java Project
输入项目名称,(为了区分作业,请包含自己的姓名)
2.将selenium 包添加到编译路径
1)在项目上添加文件夹"lib" ( 文件夹名也可以是其他的,不影响使用)
弹出窗口中指定文件夹名称
2) 将给大家下发资料中的lib文件夹下的“4_selenium-server-4..jar”复制到lib文件夹中
3)将jar包添加到编译路径
选中刚才添加的jar文件。点击右键菜单 build path -> add to build path
如下图所示。则说明selenium已经成功添加到编译路径了
3.将junit到编译路径
为了使用junit框架来编写测试脚本,我们可以把junit添加到工程中来
在工程上点击右键菜单 build path -> configure build path,..
弹出窗口上。在library选项卡下,点击“Add library”
系统返回到 java build path 页面。点击【Apply and Close】
此时工程中可以看到junit4了奥
5.将浏览器驱动程序添加到工程中
selenium 并不能直接操作浏览器,它需要通过浏览器驱动程序操作浏览器。
为了便于管理,我们把浏览器驱动程序也放到项目工程中。
这里需要注意,浏览器驱动程序一定要和浏览器一致,是火狐还是edge浏览器,版本是多少,都要弄清楚。
例如,
edge浏览器在网址中输入:edge://version/ 可以查看edge浏览器的版本号
火狐浏览器在网址中输入:about:support 可以查看浏览器版本
本次以火狐浏览器为例说明
新建文件夹“firefoxdriver”
然后把我给大家的firefoxdriver下的“geckodriver-v0.34.0-win32.exe”复制,粘贴该文件夹下
如下所示,火狐浏览器的驱动程序已经放到工程中了,后面我们就可以使用该驱动程序了
4.创建测试文件
在工程src目录上点击右键 New - > class ,添加一个java文件
输入测试类的名称(请大家包含自己的姓名,后面作业提交截图会用到)
5.编写第一个测试用例
1)输入如下图中的矩形框内的代码
2)导包
此时,@Test注解飘红,这是因为还没有将其添加到编译路径上
下面我们来导包。光标悬停在飘红的Test上时,系统会给出若干个快速解决方案。如下所示,选择导入 oig.junit
导入后,@Test不在飘红了,说明系统已经能识别到该类了。
3) 输入脚本
大家可以复制如下脚本。
复制之前可以看一下我写脚本的过程,对大家编写脚本也有帮助
元素定位,大家可以借助开发中工具(F12可以打开)点选元素,拷贝它的xpath定位方式 和css定位方式
System.setProperty("webdriver.gecko.driver", "firefoxdriver\\geckodriver-v0.34.0-win32.exe"); // 设置chrome驱动程序的路径WebDriver driver = new FirefoxDriver(); //实例化浏览器driver.get("https://www.baidu.com/"); //打开百度页面driver.manage().window().maximize(); //最大化窗口driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("曹红杏"); //搜索框输入 你的名字driver.findElement(By.xpath("//*[@id=\"su\"]")).click();driver.findElement(By.xpath("//*[@id=\"1\"]/div/div[1]/div[1]/h3/a")).click();//切换窗口Object win2 = driver.getWindowHandles().toArray()[1];driver.switchTo().window((String)win2);String text = driver.findElement(By.xpath("/html/body/div[6]/div/div/div[3]/form/div[1]/h3")).getText();Assert.assertEquals("曹红杏", text);
6.运行测试用例
选中要运行的测试用例执行
由于脚本中未考虑测试程序和被测程序的同步问题。有的页面还没有加载完成。测试程序就试图定位,导致元素定位不到,junit执行会出错
7. 三种同步方式
大家可以使用任意一种同步方式,使得脚本正常运行
强制等待
Thread.sleep(n); 停顿n毫秒
sleep可能抛出异常,异常可以自己处理,即使用try..catch捕获,也可以throw抛出,交给调用者处理
隐式等待
隐式等待时间也叫全局等待时间,并设置有超时时间;
即脚本运行到此处时,在等待时间内进行轮询,直到页面元素出现方继续向下运行, 若在超时时间内仍有元素未出现,则不再等待,脚本继续往下运行。
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); 隐式等待具有全局性,对所有的元素定位都有效果
显示等待
显式等待是针对于某个特定的元素设置的等待时间, 在设置时间内,元素变得可用,则继续执行后续操作;如果等待时间后元素仍然不可用,则抛出NoSuchElementException异常。
例如:
WebDriverWait wait =new WebDriverWait(driver, 5); wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*@id='1']/div/div[1]/h3/a")));
8.窗口切换
百度搜索时,点击第一个链接,会打开一个新的页面。如果希望到新的页面上继续操作。
则需要先切换到该页面上奥。然后才能在该页面上定位元素,进行操作。
Object win2 = driver.getWindowHandles().toArray()[1];
driver.switchTo().window((String)win2);