文章目录

一、环境准备二、Web 自动化测试 Demo三、元素定位常用方法四、元素定位失败可能原因五、测试对象操作六、等待操作七、信息打印

在学习 Web 自动化测试的过程中,selenium 是其中的常用工具。除了其开源免费,包含丰富的 API 以外,它还支持多浏览器,多系统,多语言等等优点

一、环境准备

这里将使用Java语言,在谷歌浏览器(Chrome)下来进行 selenium 工具的使用。

想要开展自动化测试,首先要保证环境已经部署到位,包括 selenium 工具包,Chrome浏览器,Webdriver(Chromedriver 谷歌驱动),java版本至少为8

关于 selenium 工具包,在我们创建好一个 Maven 项目之后,就需要在 pom.xml 中引入依赖。完成后,一定要点开界面右上角的 Maven 按钮,点击刷新按钮进行刷新

org.seleniumhq.selenium

selenium-java

4.0.0

Chrome 浏览器记得在官方网页下载就行。

由于使用的是 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(); //测试 ing

test1.endTest(); //测试收尾

}

}

三、元素定位常用方法

在上面的测试 Demo 中就已经举例出了一种元素定位方法——By.id()【通过id】

除此外还有通过 cssSelector,xpath,tagName,className,name,partialLinkText,linkText

//一、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,ctrl+f,把要检查的 cssSelector 输入,看能否只定位到一个元素。

原因三:页面还没有加载完成,就开始定位元素

一般来说,代码执行的速度比页面渲染速度要快。代码执行到了,但目标元素在页面中还没有渲染出来导致没法定位到目标元素,因此需要合理使用元素等待

原因四:元素没有达到可见的条件

比如目标元素需要鼠标悬停或者单击页面上的某个元素或者需要需要滚动条下拉才能找到。或者还有可能,需要定位的元素在新的窗口中,但是还没有打开新的窗口,需要切换到新窗口才可以找到目标元素。还有可能某些元素本来就是不可见的,比如 display 属性为 none,这就需要通过 JavaScript 修改 display 的值

原因五:存在表单嵌套

顺着定位元素往上找,查看是否有