有关网站建设的网站,WordPress与odoo接口,鞋图相册网站怎么做,音乐视频怎么做mp3下载网站文章目录一、环境准备二、Web 自动化测试 Demo三、元素定位常用方法四、元素定位失败可能原因五、测试对象操作六、等待操作七、信息打印在学习 Web 自动化测试的过程中#xff0c;selenium 是其中的常用工具。除了其开源免费#xff0c;包含丰富的 API 以外#xff0c;它还…
文章目录一、环境准备二、Web 自动化测试 Demo三、元素定位常用方法四、元素定位失败可能原因五、测试对象操作六、等待操作七、信息打印在学习 Web 自动化测试的过程中selenium 是其中的常用工具。除了其开源免费包含丰富的 API 以外它还支持多浏览器多系统多语言等等优点
一、环境准备
这里将使用Java语言在谷歌浏览器Chrome下来进行 selenium 工具的使用。
想要开展自动化测试首先要保证环境已经部署到位包括 selenium 工具包Chrome浏览器WebdriverChromedriver 谷歌驱动java版本至少为8
关于 selenium 工具包在我们创建好一个 Maven 项目之后就需要在 pom.xml 中引入依赖。完成后一定要点开界面右上角的 Maven 按钮点击刷新按钮进行刷新
dependenciesdependencygroupIdorg.seleniumhq.selenium/groupIdartifactIdselenium-java/artifactIdversion4.0.0/version/dependency
/dependenciesChrome 浏览器记得在官方网页下载就行。
由于使用的是 Chrome 浏览器那么我们使用的驱动得是谷歌驱动Chromedriver这个驱动的作用就是协助打开 Chrome 浏览器的因为代码是没有办法自己直接打开浏览器进行一系列操作的。
下载驱动的具体操作呢首先要先查看一下 Chrome 浏览器的版本浏览器右上角的三个点 ▶️ 帮助 ▶️ 关于 Google Chrome 然后进入下面的地址选择与 Chrome 版本最接近的版本点进去下载驱动
链接Chromedriver 下载完成后将 chromedriver.exe 放到 C:\Program Files\Java\jdk1.8.0_192\bin 目录下默认情况下
PS最好停止浏览器自动更新的功能不然版本更新后又需要下载新的驱动
具体操作控制面板 ▶️ 管理工具 ▶️ 服务 ▶️ Google更新服务禁用右击属性设置 二、Web 自动化测试 Demo
主要内容就是打开浏览器打开百度网页在搜索框中输入搜索关键词点击 “百度一下“ 搜索按钮查看到搜索结果内容关闭浏览器
public class Test1 {//创建出一个驱动对象来private ChromeDriver driver new ChromeDriver();//自动化测试前必须的操作打开网址public void startTest() {driver.get(https://www.baidu.com/);}public void demoTest() throws InterruptedException {Thread.sleep(1000);//等待1秒为了更方便的查看测试状态//找到 id 为 kw 的元素百度输入框,然后往该元素中填充搜索词 巴巴driver.findElement(By.id(kw)).sendKeys(巴巴);Thread.sleep(1000);//找到 id 为 su 的元素百度一下按钮然后点击一下driver.findElement(By.id(su)).click();Thread.sleep(1000);}//自动化测试后必须的操作释放掉驱动对象浏览器关闭public void endTest() {driver.quit();}
}调用测试方法类
public class RunTest {public static void main(String[] args) throws InterruptedException {Test1 test1 new Test1();test1.startTest(); //测试准备test1.demoTest(); //测试 ingtest1.endTest(); //测试收尾}
}三、元素定位常用方法
在上面的测试 Demo 中就已经举例出了一种元素定位方法——By.id()【通过id】
除此外还有通过 cssSelectorxpathtagNameclassNamenamepartialLinkTextlinkText
//一、id 定位全局唯一可定位成功
driver.findElement(By.id(kw));
//二、cssSelector 定位唯一可定位成功
driver.findElement(By.cssSelector(#kw));
//三、xpath 定位唯一可定位成功
driver.findElement(By.xpath(//*[id\kw\]));
//四、tagName 定位标签名不唯一性大定位失败率高
driver.findElement(By.tagName(input));
//五、className 定位不唯一性大定位失败率高
driver.findElement(By.className(s_ipt));
//六、name 定位有定位失败的可能
driver.findElement(By.name(wd));
//七、linkText 定位链接名定位
driver.findElement(By.linkText(hao123));
//八、partialLinkText 定位部分链接名定位
driver.findElement(By.partialLinkText(123));定位元素时一定要保证元素能够找到且唯一否则定位失败 四、元素定位失败可能原因
原因一定位的方式不唯一或者根本就没与该元素
检查该元素是否可定位可通过F12的console标签通过document.querySelector() 的方法定位可验证是否能找到元素
原因二如果使用 cssSelector 或者 xpath 的话其定位方式错误
按下F12,ctrlf,把要检查的 cssSelector 输入看能否只定位到一个元素。
原因三页面还没有加载完成就开始定位元素
一般来说代码执行的速度比页面渲染速度要快。代码执行到了但目标元素在页面中还没有渲染出来导致没法定位到目标元素因此需要合理使用元素等待
原因四元素没有达到可见的条件
比如目标元素需要鼠标悬停或者单击页面上的某个元素才能找到。或者还有可能需要定位的元素在新的窗口中但是还没有打开新的窗口需要切换到新窗口才可以找到目标元素
原因五存在表单嵌套
顺着定位元素往上找查看是否有 iframe 标签找到说明要定位此元素需先切换到此表单再定位元素。
五、测试对象操作
5.1 click 点击对象
driver.findElement(By.partialLinkText(123)).click();5.2 send_keys 按键输入
driver.findElement(By.id(kw)).sendKeys(巴巴);5.3 clear 清除输入
driver.findElement(By.id(kw)).clear();5.4 submit 提交表单
driver.findElement(By.id(su)).submit();click 和 submit 都可以操作按钮不同的是click 可以点击页面中的任何元素但可以 click 的地方不一定可以 submit 所以一般使用 click 就行
5.5 getText 文本获取
String str driver.findElement(By.partialLinkText(123)).getText();
System.out.println(str);获取的文本是不包含在标签内的标签中的 value 值指的是 value 的属性值
5.6 getAttribute 属性值获取
String str1 driver.findElement(By.id(su)).getAttribute(type);
String str2 driver.findElement(By.id(su)).getAttribute(value);
String str3 driver.findElement(By.id(su)).getAttribute(id);
String str4 driver.findElement(By.id(su)).getAttribute(class);
System.out.println(type:str1 value:str2 id:str3 class:str4);六、等待操作
在元素定位失败的原因中有提到过代码的执行速度比页面渲染的速度快如果目标元素还没渲染出来代码就已经执行到了就会导致找不到目标元素所以等待的操作是非常有必要的
强制等待
Thread.sleep(1000);参数是强制等待的时间单位是毫秒用法非常简单。指定多少时间就会让程序暂停多少时间等待时间结束后才会继续执行下一步方便调试查看测试过程。但固定的等待时间导致测试时间过长降低测试效率
隐式等待
public void waitTest() {driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));//隐式等待设置等待的时间为 2单位为秒driver.findElement(By.id(kw)).sendKeys(狗狗);driver.findElement(By.id(su)).click();driver.findElement(By.xpath(//*[id\5\]/div/div/h3/a)).click();
}隐式等待指的是在自己设置的这段时间内不停的等待目标元素出现如果在时间范围内始终没有出现就会抛出找不到元素异常NoSuchElementException。并且隐式等待作用范围为整个 Webdriver 生命周期所以放在哪里影响不大只要没退出浏览器就一直存在。
和强制等待相比无疑是节省了很多的时间
显示等待
隐式等待有个缺点那就是需要等待所有的元素都展现出来了才会执行下一步。与之相比显示等待的优点就是针对某个元素进行等待不需要等到所有元素都渲染好目标元素出现就可以结束了进一步提高测试效率但是写法相较于前两种来说更为复杂。
public void waitTest() {driver.findElement(By.id(kw)).sendKeys(狗狗);driver.findElement(By.id(su)).click();//创建一个显示等待的对象初始化时传入两个参数一个是驱动对象另一个是等待时间WebDriverWait wait new WebDriverWait(driver,Duration.ofSeconds(3));//在规定时间内不停寻找目标元素//结束的契机就是until括号内的条件满足即目标元素已经被找到了没找到就抛出异常wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(//*[id\5\]/div/div/h3/a))).click();
}PS隐式等待和显示等待不要放在一起使用不然实际等待的时间将没有办法预期
七、信息打印
public void printTest() {String title driver.getTitle(); //获取网址标题String url driver.getCurrentUrl(); //获取网址 urlSystem.out.println(title:title url:url);
}