java selenium 自动化笔记-不是0基础,至少有java基础
本来今天要学GitHub的,但是在群里问了下小伙伴时被暴击。说我学的东西太多太杂,不是很深入,都是皮毛。
哎~自己早深有意识到,因个人能力吧,找的资料都不是很全,加上实际工作没有应用到。
所以写一篇selenium的笔记,有人问到的话,我也可以大声的回答,我学了这些。菜鸡就得活给别人看,你还不是黑客不是大佬,没有自由。
如果还有什么东西没学到的话,麻烦大家指出补充。谢谢~!
学习中想到的几个问题(可能是面试题):
1.显示等待和隐式等待的区别
2.显示和隐式两者哪个使用率高?(推荐使用显示)
3.元素定位优先?ID>Name>CSS>XPath。效率最高的是CssLocator
第一个项目是跟着这位老师写的http://www.testclass.net/selenium_java/
案例地址http://www.cnblogs.com/zdfbk/p/8276933.html
老师们喜欢把知识分页,我以自己喜欢的方式汇集成一个页面吧。虽然有点浪费时间(CVM模式开启),但是方便以后找吧。
List‘s GO
哦~对了,这里只写代码
WebDriver driver = new ChromeDriver();//打开谷歌浏览器
driver.get("http://www.baidu.com"); //打开网页
String title = driver.getTitle();//获取页面标题 //用的最多的一个方法,睡眠,1秒等于1000毫秒
Thread.sleep(2000); WebElement KW = driver.findElement(By.id("kw"));
//元素定位
driver.findElement(By.id("kw"));//有name、classname、tagname、xpath、cssSelector、、、
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
driver.findElement(By.linkText("新闻");//通过连接文本定位
driver.findElement(By.partialLinkText("新");//模糊定位 driver.manage().window().maximize();//设置浏览器大小,此次设置为最大化
driver.manage().window().setSize(new Dimension(480, 800));//设置浏览器宽高
driver.navigate().back();//浏览器执行后退
driver.navigate().forward();//浏览器执行前进
System.out.printf(driver.getCurrentUrl());//输出当前连接
driver.navigate().refresh();//刷新页面 //键盘操作
KW.sendKeys("哈喽");//文本框输入哈喽
//看老师说的,这个sendKeys还能指定上传的文件。以后有需要的话看这个老师http://blog.csdn.net/huilan_same/article/details/52439546。也可看17章
driver.findElement(By.name("file")).sendKeys("D:\\upload_file.txt");//01/24补充。上传文件的定位就这么简单
KW.sendKeys(Keys.BACK_SPACE);//回格键,消掉'喽'
/*
sendKeys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
sendKeys(Keys.ESCAPE) 回退键(Esc)
sendKeys(Keys.F1) 键盘 F1
*/ KW.clear();//清空文本框
driver.findElement(By.id("su")).click();//点击按钮
KW.submit();//提交表单,同“回车键”
KW.getSize();//返回元素的尺寸
KW.getText();//获取元素文本
KW.getAttribute("type");//返回元素的属性值, 可以是 id、 name、 type 或元素拥有的其它任意属性
boolean issee = KW.isDisplayed();//返回元素的结果是否可见, 返回结果为 True 或 False //在WebDriver中,关于鼠标操作的方法封装在ActionChains类提供。这个就有点绕了。
Actions action = new Actions(driver);//调用Actions()类,将浏览器驱动driver作为参数传入。
WebElement search_setting = driver.findElement(By.linkText("设置"));
action.clickAndHold(search_setting).perform();
//clickAndHold() 方法用于模拟鼠标悬停操作
//perform() 执行所有ActionChains中存储的行为, 可以理解成是对整个操作的提交动作。
action.contextClick(driver.findElement(By.id("element"))).perform();//鼠标右键指定的元素
//doubleClick()双击。(老师注释错了(滑稽)) // 鼠标拖拽动作, 将 source 元素拖放到 target 元素的位置。
WebElement source = driver.findElement(By.name("element"));
WebElement target = driver.findElement(By.name("element"));
action.dragAndDrop(source,target).perform();
// 释放鼠标
action.release().perform(); //获取断言信息
driver.getTitle();//获取当前title
driver.getCurrentUrl();//获取当前URL driver.close();//只关闭
driver.quit();//完全退出。不会有进程
老师用的是close,刚开始用的时候也是用的close,但是用了一段时间之后开始电脑开始变卡,发现出现了很多重复的进程,开始寻找其他关闭方式,发现了quit(),用到现在一直没有深入去了解这两个方法的区别,以个人理解就是close关闭不是正常退出操作,所以有一些残留,而quit是正常退出。
今天刚好百度了一下,close关闭时并不会清除临时文件中webdriver的临时文件,而quit则会,并关闭浏览器驱动。
那close存在的意义是?用处在哪?有大佬知道的可指点下。
只写到了第12章。后面的是比较深入的代码了。不容易整合。慢慢来吧。休息
2018-01-24
//显示等待
//WebDriverWait类是由WebDirver提供的等待方法。专门针对某个元素进行等待判断。.在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。
public class TimeOut01 { public static void main(String[]args) throws InterruptedException {
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com"); //显式等待, 针对某个元素等待
WebDriverWait wait = new WebDriverWait(driver,10,1);//driver: 浏览器驱动。 10: 最长超时时间, 默认以秒为单位。 1: 检测的的间隔(步长) 时间, 默认为 0.5s。 wait.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver text) {
return text.findElement(By.id("kw"));//上面那些照搬就行了,老师也没怎么说,没看到有什么介绍。我就理解缩减为wait.until().sendKeys();如果找到则输入文本,没有则报错
}
}).sendKeys("selenium"); driver.findElement(By.id("su")).click();
Thread.sleep(2000); driver.quit();
}
}
public class TimeOut02 { public static void main(String[] args){ WebDriver driver = new ChromeDriver(); //页面加载超时时间设置为 5s
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);//这里理解为跟设置浏览器大小一样,只修改时间5,其他照搬
driver.get("https://www.baidu.com/"); //定位对象时给 10s 的时间, 如果 10s 内还定位不到则抛出异常
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("kw")).sendKeys("selenium"); //异步脚本的超时时间设置成 3s
driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS); //这里看到异步脚本,百度搜了一下线程看,好长的一大篇,浪费了一上午,先跳过吧
driver.quit();
}
}
进入iframe的就看案例吧
窗口切换用的有点少啊,大概多线程的时候才会用到。跳过跳过。
第十五章下拉框选择………………直接xpath就行了啧。
第十八章
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com"); Cookie c1 = new Cookie("name", "key-aaaaaaa");//这里的name和value看这篇文章http://www.cnblogs.com/fnng/p/6431484.html(问了虫大佬,两分钟秒回连接,办事效率一级流弊,不小心变成小迷弟了)。不过获取“BAIDUID”和“BDUSS”的值可以在浏览器开发工具F12获取,具体看下图
Cookie c2 = new Cookie("value", "value-bbbbbb");
driver.manage().addCookie(c1);
driver.manage().addCookie(c2); //获得 cookie
Set<Cookie> coo = driver.manage().getCookies();
System.out.println(coo); //删除所有 cookie
//driver.manage().deleteAllCookies(); driver.quit();
利用开发工具查看Cookies,俗话说的好,杀只蟑螂何必用火箭,F12能搞定的东西就不用Fiddler啦
2018-01-25 14:49:22
第十九章是调用JavaScript啊……最近想复习一下JavaScript呢,学完下一章复习一下吧。又想写一篇性能的,看心情吧
//这是需要导的包
import org.openqa.selenium.WebDriver; WebDriver driver = new ChromeDriver();
//底部滚动条向右拉动100,垂直滚动条向下拉动450,就算没有滚动条也不会报错。window.scrollTo(0,450);
((JavascriptExecutor)driver).executeScript("window.scrollTo(100,450);");
第二十章窗口截取。这里有一个包需要下载导入。配上连接http://commons.apache.org/proper/commons-io/download_io.cgi
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils; File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(srcFile,new File("d:\\报错截图\\screenshot.png"));
} catch (IOException e) {
e.printStackTrace();
}
20章全看完啦,看看还有其他的木有。。。如果有其他资料,或者其他知识请告知
记得之前有大佬讲过分布式。
看了JavaScript有nodejs自动化。
新增:
数据存储读取,数据存储有多种方法,数组、txt、csv、xml、数据库……通用性较高就用csv吧
第三方jar包下载:avacsv2.1:http://sourceforge.net/projects/javacsv/files/
如何导入百度搜:eclipse导入jar包
案例:http://blog.csdn.net/yjlch1016/article/details/77850930
java selenium 自动化笔记-不是0基础,至少有java基础的更多相关文章
- java+selenium自动化脚本编写
实训项目:创盟后台管理,页面自动化脚本编写 使用工具:java+selenium 1)java+selenium环境搭建文档 2)创盟项目后台管理系统链接 java+selenium环境搭建 一.Se ...
- java+selenium自动化实践
git+java+selenium+testng +maven+idea 1.git之代码维护(下载.分支切换.上传) 下载命令 "git clone git@github.com:Luna ...
- Java架构师笔记-你必须掌握的 21 个 Java 核心技术!(干货)
闲来无事,师长一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘复盘.而写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Jav ...
- Java&Selenium自动化测试之数据驱动
一.摘要 本片博文以四个方式展示自动化测试的数据驱动,数组.CSV.Excel.Mysql 二.TestNG&Csv&Driven package testNGWithDataDriv ...
- Java+Selenium自动化对非输入框的日历或日期控件的处理
如图: 1.问题描述: 在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这 ...
- Java&Selenium自动化测试之Page Object Model
PO是什么: 1.页面对象模型(PO)是一种设计模式,用来管理维护一组web元素的对象库 2.在PO下,应用程序的每一个页面都有一个对应的page class 3.每一个page class维护着该w ...
- java+selenium自动化遇到confirm弹窗,出现NoAlertPresentException: no alert open
//操作js的confirm弹窗,bool控制是否点击确定,true为点击确定,false为点击取消 public static void OperaterJSOfConfirm(WebDriver ...
- Selenium自动化测试之启动浏览器
Selenium自动化测试之启动浏览器 一.Eclipse新建java工程 1.新建java工程:File->New->Java Project,输入Project name:如AutoT ...
- Python+Selenium自动化-模拟键盘操作
Python+Selenium自动化-模拟键盘操作 0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...
随机推荐
- Oracle数据库之四 简单查询
四.简单查询 简单查询的主要特征就是将一张数据表之中的全部数据行进行显示,而后可以利用 SELECT 子句来控制所需要的输出列. 4.1.基础语法 范例:查询 emp 表中的数据(全部数据查询) ...
- ArcMap和ArcGIS Pro加载百度地图
前面发布了两篇我用ArcBruTile开发用于ArcMap加载百度地图的插件ArcBruTileBaidu,放在网上后评论和反响还不错,还有两位大学同学通过百度搜索居然搜到我本人!文章和技术介绍也被网 ...
- AI资源对接需求汇总:第3期
更好的阅读体验,请查看首发原文链接:AI资源对接需求汇总:第3期 平台介绍 平台由人工智能领域几个知名原创公众号发起,总读者约25万. 主要面向人工智能领域的从业者,涵盖图像处理.三维计算机视觉.机器 ...
- Delphi - Windows系统下,Delphi调用API函数和7z.dll动态库,自动把文件压缩成.tar.gz格式的文件
项目背景 应欧美客户需求,需要将文件压缩成.tar.gz格式的文件,并上传给客户端SFTP服务器. 你懂的,7-Zip软件的显著特点是文件越大压缩比越高,在Linux系统上相当于我们Windows系统 ...
- JavaScript入门之AJAX:原生ajax
背景 传统的Web应用允许用户端填写表单(form),当提交表单时就向网页服务器发送一个请求.服务器接收并处理传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分H ...
- ccpc网赛 hdu6703 array(权值线段树
http://acm.hdu.edu.cn/showproblem.php?pid=6703 大意:给一个n个元素的数组,其中所有元素都是不重复的[1,n]. 两种操作: 将pos位置元素+1e7 查 ...
- 【百度之星】【java大数+C++做法】hdu 6719 Strassen
代码:递归搜索一下.java大数做法 import java.util.*; import java.math.*; import java.security.MessageDigest; publi ...
- CodeForces 779D. String Game(二分答案)
题目链接:http://codeforces.com/problemset/problem/779/D 题意:有两个字符串一个初始串一个目标串,有t次机会删除初始串的字符问最多操作几次后刚好凑不成目标 ...
- JS执行机制详解,定时器时间间隔的真正含义
壹 ❀ 引 通过结果倒推过程是我们常用的思考模式,我在上一篇学习promise笔记中,有少量关于promise执行顺序的例子,通过倒推,我成功让自己对于js执行机制的理解一塌糊涂,js事件机制,事件 ...
- 一文读懂 Android TouchEvent 事件分发、拦截、处理过程
什么是事件?事件是用户触摸手机屏幕,引起的一系列TouchEvent,包括ACTION_DOWN.ACTION_MOVE.ACTION_UP.ACTION_CANCEL等,这些action组合后变成点 ...