功能自动化测试之基于Java语言的Selenium(一)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

一、基于 Java 语言的 Selenium 环境搭建

  • 安装 jre+eclipse,创建 Java 项目
  • 在前面的测试方法之Java白盒测试(二)文章中有详细介绍
    在这里插入图片描述
    在这里插入图片描述
  • 安装 selenium:在 eclipse 中导入如下包
    ✔     selenium-java-3.9.1.zip
    ✔     selenium-server-standalone-3.9.1.jar
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 准备浏览器驱动器
    ✔     无需安装,复制到某个位置(此位置需要写到代码中)
    ✔     IEDriverServer、chromedriver(google)、geckodriver(Firefox)
    ✔     webdriver.Ie()、.Chrome()、.Firefox()
    在这里插入图片描述
  • 使用 Selenium IDE
    ✔     断网安装 Firefox57
           ★     选择自定义安装(不要选择默认安装),取消勾选"安装维护服务"
           ★     安装完成后,工具—选项—常规—firefox 更新:勾选“不检查更新”即可,去掉勾选“自动更新搜索引擎”
    在这里插入图片描述
    ✔     联网安装 SeleniumIDE
           ★     设置—附加组件—扩展—搜索 SeleniumIDE,然后安装
           ★     在Web自动化测试实战(二)文章中也有详细介绍过SeleniumIDE
    在这里插入图片描述
    在这里插入图片描述
  • 打开selenium ide,创建一个项目
    在这里插入图片描述
  • 点击REC录制脚本,输入要录制的网站地址,点击开始录制即可
    在这里插入图片描述
  • 录制完成如下,selenium ide个人觉得没有功能非常一般low的很
    在这里插入图片描述

二、编写测试脚本

1.定浏览器驱动,打开浏览器

1.1 IE

  • System.setProperty(“webdriver.ie.driver”, “C:\…\IEDriverServer.exe”);
  • WebDriver driver = new InternetExplorerDriver();
    在这里插入图片描述
  • 运行代码,成功打开IE浏览器
    在这里插入图片描述

1.2 Firefox

  • 需事先安装对应驱动版本的浏览器
  • System.setProperty(“webdriver.gecko.driver”, “C:/…/geckodriver.exe”);
  • System.setProperty(“webdriver.firefox.bin”,“E:/Mozilla Firefox/firefox.exe”);
  • WebDriver driver = new FirefoxDriver();
    在这里插入图片描述
  • 运行代码,成功打开FireFox浏览器
    在这里插入图片描述

1.3 Google

  • System.setProperty(“webdriver.chrome.driver”, “C:\…\chromedriver.exe”);
  • WebDriver driver = new ChromeDriver();
    在这里插入图片描述

2.关闭浏览器窗口

  • driver.close();
    ✔     关闭页面

  • driver.quit();
    ✔     关闭页面
    ✔     关闭相关进程

  • 使用close方法能关闭浏览器,但是进程却无法结束掉
    在这里插入图片描述

  • 使用quit方法,则可以结束掉进程
    在这里插入图片描述

3.设置等待时间

  • 操作太快容易导致对象控件不出现,从而失败。

  • 隐式等待
    ✔     driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
           ★     隐式等待采用全部设置,所有的 findElement 方法都会隐式等待 1s
           ★     上述方法针对执行脚本的所有对象,等待 3 秒。
    在这里插入图片描述

  • Thread.sleep(3000);//ms
    ✔     只需放在需要等待的位置
    在这里插入图片描述

4.打开网址

说明: 为了方便测试,这里需要搭建一个webtours的案例网站,博主在自动化接口实战(一)文章有过详细搭建,这里博主再演示一遍,也是给自己加深印象

  • 安装网站所需的环境perl
    在这里插入图片描述
  • 启动服务器,点击批处理或者xigui32.exe都可以
    在这里插入图片描述
  • 输入http://localhost:1080/webtours/则可以访问网站了
    在这里插入图片描述
  • 注册账号,即可登录,注册的用户数据不是保存到数据库,而是保存到文件中的
    在这里插入图片描述
  • driver.get(“http://localhost:1080/webtours”);
    在这里插入图片描述
  • driver.getTitle()
    ✔     获得浏览器网页标题(字符串)
    在这里插入图片描述

5.识别页面元素

5.1 driver.findElement(By.属性)

说明1 搭建一个嵌套框架页面如下,最外面的为index页面,里面嵌套三个页面
在这里插入图片描述
说明2 将test目录放在C:\WebTours\MercuryWebTours目录下,那么就相当于搭建了一个网站,跟webtours一样开启xigui服务器即可访问
在这里插入图片描述

  • 查询符合属性要求的第一个对象。
  • 适用于文本框、密码框、命令按钮、单选按钮。
  • 属性
    ✔     name(“值”)
    ✔     tagName(“标签名”)
           ★     标签即<>内的关键字。
    ✔     xpath("//标记名[@属性名=‘属性值’]")
    ✔     id
    ✔     className
           ★     CSS class 属性的值
    ✔     linkText
           ★     <a href>和</a>之间的内容
    ✔     partialLinkText
           ★     <a href>和</a>之间的部分文本值

5.2 driver.findElements(By.属性).get(下标)

  • 查询符合属性要求的所有对象;
  • 适用于单选按钮、复选框、链接等。
  • 使用 get(下标)可以选择某个,从 0 开始。

6.操作页面元素的方法

6.1 文本框+密码框+多行文本框

  • sendKeys(“数据”)

  • clear()
    ✔     清空

  • getAttribute(“属性名”)
    ✔     获取对应属性的属性值,如 value

  • getText()
    ✔     获取文本值
    ✔     可能获得不到数据

  • 定位用户名输入框,发送数据
    在这里插入图片描述

  • 运行脚本,成功的定位用户名输入框并发送指定数据到输入框
    在这里插入图片描述

  • 清空用户名输入框数据,然后再输入新的数据
    在这里插入图片描述

  • 通过getAttribute方法获取属性值
    在这里插入图片描述

  • 通过getText方法获取文本值,结果显示没有获取到,因为这个方法时灵时不灵,所以可以优先使用getAttribute方法进行获取
    在这里插入图片描述

6.2 单选按钮+复选框

  • click()
    ✔     单击/选中

  • isSelected()
    ✔     是否选中

  • 检查页面中单选按钮元素信息
    在这里插入图片描述

  • 在点击选中性别男之前打印是否选中性别(默认单选按钮为第一个,所以是男的而不是女的),选中之后再次打印是否选中性别,最后打印出获取的属性值
    在这里插入图片描述

  • 如果要选择第二个单选按钮女而不是默认选择的第一个男,那么则需要通过目录5.2查找所有的元素,并通过下标获定位到女这个单选按钮
    在这里插入图片描述

  • 定位复选框,并选择第1个和第三个,如果取消选择的复选框,则再进行点击此复选框即可
    在这里插入图片描述

6.3 下拉列表

  • new Select(driver.findElement(By.name(“select 控件名”))).

  • selectByIndex(下标)
    ✔     根据下标选择某项,从 0 开始

  • selectByVisibleText(“数据”)
    ✔     根据列表框中显示的文本选择某项

  • selectByValue(“值”)
    ✔     根据值选择某项

  • 选择下拉列表中的第三个元素,并打印其value值
    在这里插入图片描述

  • 除了通过selectByIndex选择下标,还可以通过selectByValue以及selectByVisibleText来选择下拉列表中的元素
    在这里插入图片描述

6.4 链接+命令按钮

  • click()
    ✔     单击

  • 在login页面中存在top及左边两个超链接,如下所示
    在这里插入图片描述

  • 现在则通过linkText以及partialLinkText方法来定位到以上两个超链接文本,其中partialLinkText方法是匹配其中某个链接文本字段,不需要写全
    在这里插入图片描述
    在这里插入图片描述

  • 定位登录按钮元素,进行点击操作
    在这里插入图片描述

6.5 通过TagName和xpath识别控件

  • 首先检查login页面元素,一共存在8个input标签
    在这里插入图片描述
  • 那么通过TagName匹配页面中的input标签,则需要使用findElements方法,因为结果不是一个,如果使用findElement方法,则默认定位到第一个input标签元素,博主这里通过循环遍历匹配的input标签的元素列表长度,来对用户名密码的input标签进行数据的发送
    在这里插入图片描述
  • 打印出login页面中所有的文本数据,即匹配TagName标签为body整个页面数据
    在这里插入图片描述
  • 通过xpath匹配性别单选按钮中value为0的选项也就是女
    在这里插入图片描述

6.6 通过id和ClassName识别控件

  • 通过id定位用户名输入框并发送数据
    在这里插入图片描述
  • 在login页面中存在两个classname值为text的控件
    在这里插入图片描述
  • 所以博主这使用findElements来匹配获取所有,然后对用户名进行输入数据对登录按钮进行打印value值
    在这里插入图片描述
发布了132 篇原创文章 · 获赞 295 · 访问量 399万+

猜你喜欢

转载自blog.csdn.net/qq_41782425/article/details/103870739
今日推荐