本篇文章由来,这两天整理了下自己经常使用而且很熟练的项目,今天突然想起漏了一个,补上了,但想到还没对应的博客,那就写一个简单的

我经常使用且相对熟练的部分技术如下(不知道算不算各位大神眼中的辣鸡):

传统的web项目测试,大多数都依靠测试部门小伙伴人工操作,费时费力还容易侧漏`(*∩_∩*)′  错了 是漏测,

而selenium则为项目的测试提供了很大的便利,但并不是所有项目都适合,

哪些适合呢:公司自己的产品,且需要经常回归测试,比如类似OA这类业务系统产品

不适合的呢:比如外包业务,快速交付后就不管的,只需要测试一两次

案例一:一个简单示例(无弹出框这类单一页面),先看看执行效果(点击图片查看高清版本):

效果还满意么?满意请继续往下看,不满意请关闭窗口 谢谢

1.新建maven项目,引入selenium-java

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>

2.写代码(因为自动化测试速度极快,每个步骤后我都稍微停顿了下,注释也很清晰明了)

 package com.xiao.selenium;

 import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit; import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver; public class AutoTest {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(3000);
//System.setProperty("webdriver.chrome.driver", "c://chromedriver.exe");
//WebDriver webDriver = new ChromeDriver();
System.setProperty("webdriver.gecko.driver", "c://geckodriver.exe");
WebDriver webDriver = new FirefoxDriver();
webDriver.manage().window().maximize();
webDriver.manage().deleteAllCookies();
// 与浏览器同步非常重要,必须等待浏览器加载完毕
webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //打开目标地址
webDriver.get("http://192.168.0.32:88");
//输入账号 密码并登陆系统
Thread.sleep(1000);
webDriver.findElement(By.xpath("/html/body/div/div/form/div[1]/div/div/input")).sendKeys("admin");
webDriver.findElement(By.xpath("/html/body/div/div/form/div[2]/div/div/input")).sendKeys("123456");
webDriver.findElement(By.cssSelector("html body div#app div.loginPage form.el-form.fromBox button.el-button.loginBtn.el-button--primary")).click(); //选择系统
Thread.sleep(1000);
webDriver.findElement(By.xpath("/html/body/div/div/div/div[1]/p")).click(); //展开基础信息管理菜单
Thread.sleep(1000);
webDriver.findElement(By.xpath("/html/body/div/div/div/div[1]/div[3]/ul/div[1]/li/div/span")).click();
//点击科室管理菜单
Thread.sleep(1000);
webDriver.findElement(By.cssSelector(".is-opened > ul:nth-child(2) > li:nth-child(1)")).click(); //跳转到第2页
Thread.sleep(1000);
webDriver.findElement(By.xpath("/html/body/div/div/div/div[2]/div[2]/div/div[2]/div[2]/div/div[2]/ul/li[2]")).click(); //点击新增按钮
webDriver.findElement(By.xpath("/html/body/div/div/div/div[2]/div[2]/div/div[2]/div[1]/div/div[1]/div[1]/button")).click(); //根据规则随机生成文本框内容
int random = new Random().nextInt(200000000);
Thread.sleep(1000);
webDriver.findElement(By.xpath("/html/body/div[1]/div/div/div[2]/div[2]/div/div[3]/div/div[2]/form/div[1]/div[1]/div/div/input")).sendKeys(String.valueOf(random));
Thread.sleep(1000);
webDriver.findElement(By.xpath("/html/body/div[1]/div/div/div[2]/div[2]/div/div[3]/div/div[2]/form/div[1]/div[2]/div/div[1]/input")).sendKeys("自动化测试-"+random); //展开下拉框
webDriver.findElement(By.xpath("/html/body/div[1]/div/div/div[2]/div[2]/div/div[3]/div/div[2]/form/div[2]/div[1]/div/div/div[1]/span/span/i")).click();
Thread.sleep(1000);
//获取下拉框size
List<WebElement> select1 = webDriver.findElements(By.cssSelector("div.el-select-dropdown:nth-child(4) > div:nth-child(1) > div:nth-child(1) > ul li"));
//随机选择一个项目
int selectItem1 = new Random().nextInt(select1.size())+1;
webDriver.findElement(By.xpath("/html/body/div[3]/div[1]/div[1]/ul/li["+selectItem1+"]")).click(); //稍作停顿,然后保存
Thread.sleep(1000);
webDriver.findElement(By.xpath("/html/body/div[1]/div/div/div[2]/div[2]/div/div[3]/div/div[3]/div/button[1]")).click(); //跳转到我的博客
Thread.sleep(3000);
webDriver.get("https://www.cnblogs.com/xiaochangwei"); webDriver.findElements(By.className("postTitle")).forEach(x -> {
System.out.println(x.getText());
}); Thread.sleep(1000);
//打开标题为 通过Dockerfile构建镜像并发布web项目 的文章
webDriver.findElement(By.partialLinkText("通过Dockerfile构建镜像并发布web项目")).click(); Thread.sleep(1000);
//移动到底部
//((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0, document.body.scrollHeight)");
//移动到指定的坐标(相对当前的坐标移动)
((JavascriptExecutor) webDriver).executeScript("window.scrollBy(0, 700)");
Thread.sleep(1000);
//移动到窗口绝对位置坐标,如下移动到纵坐标1600像素位置
((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0, 1600)");
Thread.sleep(1000);
//移动到指定元素,且元素底部和窗口底部对齐 参考 https://www.cnblogs.com/testway/p/6693140.html
((JavascriptExecutor) webDriver).executeScript("arguments[0].scrollIntoView(false);", webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/div/div[1]/div/div/div[2]/div[4]/div[3]/div[1]/a[5]/img")));
//暂停五秒钟后关闭
Thread.sleep(2000);
webDriver.quit();
}
}

  其中:

    16行谷歌浏览器的驱动下载地址:https://chromedriver.storage.googleapis.com/index.html

    18行火狐浏览器的驱动下载地址:https://github.com/mozilla/geckodriver/releases

  然后运行,你就可以为所欲为了

 案列二:有弹出框及使用了Frame的页面,以百度盘登录为例

    

  代码如下: 

package com.xiao.selenium;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver; /**
* @Title: com.xiao.selenium.BaiduPanLogin.java
* @Description:
* @author changw.xiao@qq.com
* @date 2018年2月5日 上午9:16:44
* @version V1.0
*/
public class BaiduLogin { public static void main(String[] args) throws InterruptedException {
Thread.sleep(3000);
System.setProperty("webdriver.gecko.driver", "c://geckodriver.exe");
WebDriver driver = new FirefoxDriver();
// driver.manage().window().maximize();
driver.manage().window().setPosition(new Point(100, 50));
driver.manage().deleteAllCookies();
// 与浏览器同步非常重要,必须等待浏览器加载完毕
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://pan.baidu.com/"); Thread.sleep(1000); WebElement qqLoginLink = driver
.findElement(By.xpath("/html/body/div[1]/div[3]/div[6]/div/div[4]/div[2]/div/ul/li[2]/a"));
qqLoginLink.click();
Thread.sleep(1000); // 获取当前页面句柄
String handle = driver.getWindowHandle();
// 获取所有页面的句柄,并循环判断不是当前的句柄 然后切换到子窗体
for (String handles : driver.getWindowHandles()) {
if (handles.equals(handle))
continue;
driver.switchTo().window(handles);
} // 由于登录输入框在frame中,还需要先切换进入frame,否则,也找不到输入框的
driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='ptlogin_iframe']"))); // 调试过程中,如果提示找不到元素,不知道是否切换成功了,可以把当前handler的source打印出来看看
// System.out.println(driver.getPageSource()); driver.findElement(By.xpath("//*[@id='switcher_plogin']")).click();
driver.findElement(By.xpath("//*[@id='u']")).sendKeys("317409898");
driver.findElement(By.xpath("//*[@id='p']")).sendKeys("xxxxxxxxx");
driver.findElement(By.xpath("//*[@id='login_button']")).click(); //由于我的账号没绑定手机,点登录后会有个提示,如果直接关闭,可能被判断为还没完成登录,没有会话,所以稍等片刻
Thread.sleep(2000); //关闭弹出的子窗体
driver.close(); //driver.navigate() 下有很多方法,比如后退,刷新等
Thread.sleep(2000);
} }

    注意:1.我这里只开了两个窗口,如果是多个,而且需要在窗口间切换操作的,注意在一个窗口中完成操作后,确认是否切回到需要操作的窗口

       2.页面内部有frame的,除了切换到具体页面外,还要切换到对应的frame中才行

       3.关闭窗口时,也要确认操作的对象

selenium-java web自动化测试工具的更多相关文章

  1. 开源Web自动化测试工具Selenium IDE

    Selenium IDE(也有简写SIDE的)是一款开源的Web自动化测试工具,它实现了测试用例的录制与回放. Selenium IDE目前版本为 3.6 系列,支持跨浏览器运行,所以IDE的UI从原 ...

  2. selenium-java web自动化测试工具抓取百度搜索结果实例

    selenium-java web自动化测试工具抓取百度搜索结果实例 这种方式抓百度的搜索关键字结果非常容易抓长尾关键词,根据热门关键词去抓更多内容可以用抓google,百度的这种内容容易给屏蔽,用这 ...

  3. Node.js结合Selenium做Web自动化测试

    发现腾讯课堂上有个node.js结合Selenium做Web自动化测试的教学视频, 听来感觉不错,一来老师讲的还不错,二来node.js这门语言会越来越热,学会总没什么坏处,三来发现CukeTest这 ...

  4. Selenium的Web自动化测试(送源码)

    8.1  Selenium自动化测试准备 1.Selenium介绍 Selenium是一个Web开源自动化测试框架,页面级操作,模拟用户真实操作,API从系统层面触发事件. Selenium 1.0  ...

  5. Web自动化测试工具调研

    背景 Web自动化测试越来越被重视, 因为现在Web已经是工程化的状态. 如何通过工具测试, 保证Web开发的质量,提升开发效率,是Web工具的诞生的来由. Web测试分为以下几个方面: 1. 界面测 ...

  6. 推荐一款国产优秀的基于 AI 的 Web 自动化测试工具——kylinTOP 测试与监控平台

    对于于一般的传统的自动化测试工具,如:Selenium,robotFramework,QTP等.QTP可以通过操作录制生成自动化用例脚本.生成的脚本与Selenium.robotFramework类似 ...

  7. 5款强大的Java Web开发工具

    1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...

  8. 软件WEB自动化测试工具之智能元素定位

    江湖一直有着这么一句名言“天下武功,唯快不破".那么在软件测试领域,自然而然我们会想到软件自动化测试.软件自动化测试的实现自然离不开软件自动化测试工具.软件自动化测试工具是软件自动化的载体, ...

  9. Selenium(ThoughtWorks公司开发的web自动化测试工具)

    Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7.8.9).Mozilla Firefox.Mozill ...

随机推荐

  1. (5编译使用最新opencv)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

    从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述http://www.cnblogs.com/jsxyhelu/p/7907241.html 2环境架设http://www.c ...

  2. 多个tab选项卡

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. NOI2017&&codeM2017游记

    7.17 坐了一天动车到绍兴,宿舍环境什么的还是很棒的. 7.18 早上开幕式,没啥好看的,例行节目+讲话. 下午笔试,顺利满分,不过ccz挂了一道多选,99分,影响应该不是很大. 练习赛出人意料地没 ...

  4. POJ 3624 Charm Bracelet(01背包裸题)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38909   Accepted: 16862 ...

  5. NYoj_104最大和

    最大和 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩 ...

  6. VS2012 TFS解决离职后代码遗留未迁入问题

    第一步: 在命令行中输入 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 第二步: 根据用户查找该用户下workspac ...

  7. flume1.8 基础架构介绍(一)

    1. 系统要求 1. Java运行环境 -- Java 1.8及以上 2. 内存 -- 足够的内存供配置的sources,channels 或者sinks使用 3. 硬盘空间 -- 足够的硬盘空间供配 ...

  8. SQL强化(三) 自定义函数

    ---恢复内容开始--- Oracle中我们可以通过自定义函数去做一些逻辑判断,这样可以减少查询语句,提高开发效率 create  -- 创建自定义函数 or replace -- 有同名函数就替换, ...

  9. 用NPOI导出Excel,生成下拉列表、以及下拉联动列表(第1篇/共3篇)

    最近帅帅的小毛驴遇到一个很奇葩的需求: 导出Excel报表,而且还要带下拉框,更奇葩的是,下拉框还是联动的. 小毛驴一天比较忙,所以这等小事自然由我来为她分忧了.经历了两天,做了几种解决方案,最后完美 ...

  10. 【学习笔记】Java finalize()的使用

    <Java编程思想>中有提到,Java的垃圾回收器并不是那么靠谱,垃圾回收会占用很大的资源开销,垃圾回收器很懒,当变量和对象不再被引用.脱离作用域的时候,垃圾回收器会不定时的进行垃圾回收, ...