java selenium 自动化笔记-不是0基础,至少有java基础

本来今天要学GitHub的,但是在群里问了下小伙伴时被暴击。说我学的东西太多太杂,不是很深入,都是皮毛。
哎~自己早深有意识到,因个人能力吧,找的资料都不是很全,加上实际工作没有应用到。
所以写一篇selenium的笔记,有人问到的话,我也可以大声的回答,我学了这些。菜鸡就得活给别人看,你还不是黑客不是大佬,没有自由。

 

如果还有什么东西没学到的话,麻烦大家指出补充。谢谢~!

 了解到有一个框架:Protractor 

 

学习中想到的几个问题(可能是面试题):
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

哦~对了,这里只写代码

 1 WebDriver driver = new ChromeDriver();//打开谷歌浏览器
 2 driver.get("http://www.baidu.com"); //打开网页
 3 String title = driver.getTitle();//获取页面标题
 4 
 5 //用的最多的一个方法,睡眠,1秒等于1000毫秒
 6 Thread.sleep(2000);
 7 
 8 WebElement KW = driver.findElement(By.id("kw"));
 9 //元素定位
10 driver.findElement(By.id("kw"));//有name、classname、tagname、xpath、cssSelector、、、
11 <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
12 driver.findElement(By.linkText("新闻");//通过连接文本定位
13 driver.findElement(By.partialLinkText("新");//模糊定位
14 
15 driver.manage().window().maximize();//设置浏览器大小,此次设置为最大化
16 driver.manage().window().setSize(new Dimension(480, 800));//设置浏览器宽高
17 driver.navigate().back();//浏览器执行后退
18 driver.navigate().forward();//浏览器执行前进
19 System.out.printf(driver.getCurrentUrl());//输出当前连接
20 driver.navigate().refresh();//刷新页面
21 
22 //键盘操作
23 KW.sendKeys("哈喽");//文本框输入哈喽
24 //看老师说的,这个sendKeys还能指定上传的文件。以后有需要的话看这个老师http://blog.csdn.net/huilan_same/article/details/52439546。也可看17章
25 driver.findElement(By.name("file")).sendKeys("D:\\upload_file.txt");//01/24补充。上传文件的定位就这么简单
KW.sendKeys(Keys.BACK_SPACE);//回格键,消掉'喽' 26 /* 27 sendKeys(Keys.CONTROL,‘a’) 全选(Ctrl+A) 28 sendKeys(Keys.ESCAPE) 回退键(Esc) 29 sendKeys(Keys.F1) 键盘 F1 30 */ 31 32 33 KW.clear();//清空文本框 34 driver.findElement(By.id("su")).click();//点击按钮 35 KW.submit();//提交表单,同“回车键” 36 KW.getSize();//返回元素的尺寸 37 KW.getText();//获取元素文本 38 KW.getAttribute("type");//返回元素的属性值, 可以是 id、 name、 type 或元素拥有的其它任意属性 39 boolean issee = KW.isDisplayed();//返回元素的结果是否可见, 返回结果为 True 或 False 40 41 42 //在WebDriver中,关于鼠标操作的方法封装在ActionChains类提供。这个就有点绕了。 43 Actions action = new Actions(driver);//调用Actions()类,将浏览器驱动driver作为参数传入。 44 WebElement search_setting = driver.findElement(By.linkText("设置")); 45 action.clickAndHold(search_setting).perform();

 

46 //clickAndHold() 方法用于模拟鼠标悬停操作
47 //perform() 执行所有ActionChains中存储的行为, 可以理解成是对整个操作的提交动作。 
48 action.contextClick(driver.findElement(By.id("element"))).perform();//鼠标右键指定的元素
49 //doubleClick()双击。(老师注释错了(滑稽))
50 
51 // 鼠标拖拽动作, 将 source 元素拖放到 target 元素的位置。
52 WebElement source = driver.findElement(By.name("element"));
53 WebElement target = driver.findElement(By.name("element"));
54 action.dragAndDrop(source,target).perform();
55 // 释放鼠标
56 action.release().perform();
57 
58 //获取断言信息
59 driver.getTitle();//获取当前title
60 driver.getCurrentUrl();//获取当前URL
61 
62 
63 driver.close();//只关闭
64 driver.quit();//完全退出。不会有进程
65 老师用的是close,刚开始用的时候也是用的close,但是用了一段时间之后开始电脑开始变卡,发现出现了很多重复的进程,开始寻找其他关闭方式,发现了quit(),用到现在一直没有深入去了解这两个方法的区别,以个人理解就是close关闭不是正常退出操作,所以有一些残留,而quit是正常退出。
66 今天刚好百度了一下,close关闭时并不会清除临时文件中webdriver的临时文件,而quit则会,并关闭浏览器驱动。
67 那close存在的意义是?用处在哪?有大佬知道的可指点下。

 

只写到了第12章。后面的是比较深入的代码了。不容易整合。慢慢来吧。休息

2018-01-24

 1 //显示等待
 2 //WebDriverWait类是由WebDirver提供的等待方法。专门针对某个元素进行等待判断。.在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。
 3 public class TimeOut01 {
 4 
 5   public static void main(String[]args) throws InterruptedException {
 6     WebDriver driver = new ChromeDriver();
 7     driver.get("https://www.baidu.com");
 8 
 9     //显式等待, 针对某个元素等待
10     WebDriverWait wait = new WebDriverWait(driver,10,1);//driver: 浏览器驱动。 10: 最长超时时间, 默认以秒为单位。 1: 检测的的间隔(步长) 时间, 默认为 0.5s。
11 
12     wait.until(new ExpectedCondition<WebElement>(){
13       @Override
14       public WebElement apply(WebDriver text) {
15             return text.findElement(By.id("kw"));//上面那些照搬就行了,老师也没怎么说,没看到有什么介绍。我就理解缩减为wait.until().sendKeys();如果找到则输入文本,没有则报错
16           }
17     }).sendKeys("selenium");
18 
19     driver.findElement(By.id("su")).click();
20     Thread.sleep(2000);
21 
22     driver.quit();
23   }
24 }
 1 public class TimeOut02 {
 2 
 3   public static void main(String[] args){
 4 
 5     WebDriver driver = new ChromeDriver();
 6 
 7     //页面加载超时时间设置为 5s
 8     driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);//这里理解为跟设置浏览器大小一样,只修改时间5,其他照搬
 9     driver.get("https://www.baidu.com/");
10 
11     //定位对象时给 10s 的时间, 如果 10s 内还定位不到则抛出异常
12     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
13     driver.findElement(By.id("kw")).sendKeys("selenium");
14 
15     //异步脚本的超时时间设置成 3s
16     driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);
17 
18 //这里看到异步脚本,百度搜了一下线程看,好长的一大篇,浪费了一上午,先跳过吧
19     driver.quit();
20   }
21 }

进入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

 

posted on 2018-01-23 16:39  Zing_Z  阅读(379)  评论(0编辑  收藏  举报

导航