搞了一段时间的Selenium Web的自动化,针对项目要搭建了一套适合项目的测试框架(Selenium[POM/DataDriver]+TestNG+Ant+Jenkins)。在最开始看Selenium的时候也是满论坛的找资料学习,现在总是在想能不能搞一些适合新手入门的东西出来,当然个人能力也是有限的,只能尝试着去整理,也算是对自己学习过程的一个总结吧。下面的内容都是自己经验性的总结,有不对的地方欢迎大家拍砖,也算是共同学习共同进步啊。。。
Selenium是什么?
关于Selenium的介绍网上一大堆,我也不在这里复制粘贴了。我理解的简单一句话,“Selenium就是适合于Web测试的一个框架”,支持多语言(Java、Python、C#、Ruby等等),跨平台,多浏览器等等特性。为大家实现Web自动化测试多了一条路来选择。在这里多插一句话,自动化测试代替不了手工测试,只有你了解产品的需求才能写出完善的自动化测试脚本,还有如果想了解一样东西,官网还是最牛逼的地方,由于长城防火墙的存在,所以。。。懂的啊,我这边下载了线下的官方文档,地址为:http://pan.baidu.com/s/12pX9O。
好了,我也不墨迹了,整理整理干货吧,这个才是重点。
浏览器的选择
我们也知道了,Selenium是支持多浏览器的,这里我就暂时先说说几种在Windows下常用的浏览器(IE、Firefox、Chrome),由于Firefox是Selenium原生支持的浏览器,所以会少一些步骤,不多说了,直接上代码:
//Firefox安装在默认路径下时,下面就能将Firefox启动起来
Webdriver driver = new FirefoxDriver(); //Firefox如果没有安装默认路径下,这个时候需要首先指定Firefox安装的路径
System.setProperty("webdriver.firefox.driver","Path of firefox\\\\firefox.exe");
Webdriver driver = new FirefoxDriver(); //对于IE浏览器,首先得下载IEDriver的插件
System.setProperty("webdriver.ie.driver", "Path of location\\IEDriverServer.exe");
Webdriver driver = new InternetExplorerDriver(); //对于Chrome浏览器,也一样首先需要下载chrome插件
System.setProperty("webdriver.chrome.driver","path of location\\chromedriver.exe");
Webdriver driver = new ChromeDriver();
打开指定的网页
打开具体的网站进行测试,
WebDriver driver = new FirefoxDriver(); //打开网页的第一种方式,创建一个Navigation对象 //创建一个Navigation对象
Navigation navigation = driver.navigate();
//前往百度首页
navigation.to("http://www.baidu.com/");
//刷新当前页面
navigation.refresh();
//返回之前的页面
navigation.back(); //打开某个网页的第二种方式, driver.get(http://www.baidu.com/);
查找定位对象元素
不管你在Web页面做什么操作,首先我们得定位到这个元素对象,在Selenium提供的API中提供了一个By的对象类,这样我们通过条件对象“By”就能对元素对象进行定位。那么首先我们得了解下Selenium给我们提供了下面8种定位元素的方法:
- By.className("className"); //通过HTML 中的class来定位到指定的元素
- By.cssSelector("cssPath"); //通过css路径来定位指定的元素,接下来有时间可以总结下关于cssPath和xpath的定位
- By.id("idName"); //通过HTML的ID来定位到指定的元素
- By.linkText("linkText"); //通过HTML中链接文本来进行链接
- By.name("name"); //通过HTML中的name元素值来进行定位
- By.partialLinkText("partialLinkText"); //通过链接文本的部分值来进行定位
- By.tagName("tagName"); //通过HTML中的tag值来进行定位
- By.xpath("xpathPath"); //通过xpath来进行定位,
下面的例子也已百度首页为例子来进行说明。
比如定位百度搜索的输入框(火狐上可以下载两个插件工具,FireBug+FirePath,来帮助定位元素)
输入框元素:
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"/>
百度一下按钮元素:
<input id="su" class="bg s_btn btnhover" type="submit" value="百度一下"/>
新闻链接元素:
<a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a>
WebDriver driver = new FirefoxDriver();driver.get("http://www.baidu.com/");
By by = null; //通过ID定位输入框
WebElement elementInput = driver.findElement(by.id("kw"));
//通过classname来定位提交按钮元素
WebElement elementBtn = driver.findElement(by.className("bg s_btn btnhover"));
//通过linkText来定位右上方的“新闻”链接
WebElement elementLink = driver.findElement(by.linkText("新闻"));
//通过xpath来定位HAO123链接
WebElement elementHao123 = driver.findElement(by.xpath(".//*[@id='u1']/a[2]"));
//通过csspath来定位登陆按钮
WebElement elementMap = driver.findElement(by.cssSelector(".lb"));
上面写了几种方式来定位元素,大家感受下这些定位元素的方式,关于xpath和cssSelector的定位,以后有时间在说说。Selenium在这里提供了findElement的方法来方便查找元素。
就在项目中的感受来讲,如果框架搭建完成以后,定位元素将是一项最大的工程了,所以在这里应该好好看看,方便接下来的学习。
操作元素以及获取页面相关元素值
元素我们找到了,接下来我们就应该对我们找到的元素进行操作,那么Selenium又为我们封装了哪些基本的操作方法呢?比如说,我们对元素进行点击,输入框输入值,下拉框选择某个元素等等操作,有时候我们在验证页面是否满足需求的时候,我们也需要获取元素的相关值与预期值来进行比较。
下面我只是简单的列出一些基本方法来说明一些小问题,让新手有个大概的了解,然后在以具体的页面来进行操作。让大家有个具体清晰的认识
//清空输入框的内容
elementInput.clear();
//输入相关的值
elementInput.sendKeys("test input text");
//点击按钮
elementBtn.click();
//获取文本框的值
elementBtn.getText();
//获取到具体的链接地址
elementHao123.getAttribute("href");
当然有些时候这些简单的操作是不能完成一些动作的,比如我们移动鼠标到某个元素上:
//创建一个Actions的类,然后根绝要执行的操作进行对应的复杂操作
Actions action = new Actions(driver);
action.moveToElement(elementBtn).build().perform();
警告框的处理
在操作Web页面的时候,最常见的弹框应该是警告框的弹出,提醒客户同不同意之类的警告框,遇到这种对话框的时候,该如何处理呢?Selenium提供了一个Alert的类,帮助我们来对警告框进行处理。
//定位到Alert对话框上
Alert alert = driver.switchTo().alert();
//获取Alert对话框的内容
alert.getText();
//接受警告框的内容,并关闭该对话框
alert.accept();
//不同意警告框的内容,并关闭该对话框
alert.dismiss();
多对话框的处理
在很多情况下,我们在打开另一个页面的时候,它是会弹出另外一个新的对话框页面,如何定位到新的对话框上来呢?这个时候出现了一个概念就是对话框的句柄,每个对话框都有一个唯一的标识符那就是句柄,我们可以通过句柄的定位到当前的对话框上。Selenium提供了一个方法,driver.switchTo().window(“valueOfHandle”),通过传入新窗口的句柄从而定位到新的窗口上,然后就能对新窗口进行对应的操作。
//得到当前窗口的句柄
String currentHandle = driver.getWindowHandle(); //得到所有窗口的句柄
Set<String> handles = driver.getWindowHandles(); //创建一个迭代器
Iterator<String> iterator = handles.iterator(); //实现迭代
while(iterator.hasNext()){ String handle = iterator.next(); //和当前窗口的句柄作比较,如果和当前窗口句柄相同,就将当前窗口句柄传给Selenium
if(currentHandle.equals(handle)){ driver.switchTo().window(handle); System.out.println("Current Window URL is: " + driver.getCurrentUrl()); } }
关闭窗口以及隐性等待时间的操作
//等待时间的设置,隐性时间的等待设置,是贯穿于这个类的整个生命周期的,不是针对某一点上,在Selenium的操作的过程中,这个等待时间都是生效的
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //关闭所有窗口
driver.quit(); //关闭当前定位的窗口
driver.close();
今天就到这,后续会针对一个简单的页面,将上面的所有操作汇总下。
Selenium的自我总结1的更多相关文章
-
python下selenium自动化测试自我实践
周末实验自动化提交数据时,本来没打算写记录的,不过遇到一些问题,觉得可以提提.基本操作就不用写了,搜索过程中都发现了两个博客都出了selenium+python的书,说明操作一搜一大把. 1. 等待页 ...
-
Selenium的自我总结2_元素基本操作
对于Selenium的基本元素的操作,就自己的了解做了一个基本的介绍,这篇直接上代码,针对一个页面如何操作写了些基本的操作脚本,希望对初学者有一定的帮助,也希望通过这些总结让自己有一些清晰的认识和了解 ...
-
selenium自我手册
(转载需注明原文地址和作者两项,否则视为非授权) 语言:python 0x00 预热 下载安装包 pip install selenium 确定所用的浏览器 支持firefox,chrome,IE,e ...
-
[python爬虫] Selenium定向爬取海量精美图片及搜索引擎杂谈
我自认为这是自己写过博客中一篇比较优秀的文章,同时也是在深夜凌晨2点满怀着激情和愉悦之心完成的.首先通过这篇文章,你能学到以下几点: 1.可以了解Python简单爬取图片的一些思路和方法 ...
-
selenium是如何启动浏览器的
前几天有同学问到selenium是怎么样启动浏览器的(selenium启动浏览器的原理),当时稍微讲解了一下,不过自我感觉不够具体,现在特地把启动原理通过代码和一系列操作给串联起来,希望可以帮助大家更 ...
-
Selenium原理初步--Android自动化测试学习历程
章节:自动化基础篇——Selenium原理初步(第五讲) 注:其实所有的东西都是应该先去用,但是工具基本都一样,底层都是用的最基础的内容实现的,测试应该做的是: (1)熟练使用工具,了解各个工具的利弊 ...
-
孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解
孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解 (今天由于文中所阐述的原因没有进行屏幕录屏,见谅) 为了能够使用selenium模块进行真正的操作,今天主要大范围搜索资料进行 ...
-
selenium从入门到应用 - 2,简单线性脚本的编写
本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下 ...
-
Selenium学习第二天,了解Selenium工作模式与学习Selenium需要具备的知识与工具。
Selenium学习网站: 1.http://www.ltesting.net/ceshi/open/kygncsgj/selenium/2014/0408/207237.html——好像是对API的 ...
随机推荐
-
<;关于数据仓库>;基于docker的Mysql与Hadoop/Hive之间的数据转移 (使用Apache Sqoop™)
原创博客,转载请联系博主! 摘要:本文介绍了如何使用docker快速搭建一个可以从外部访问的mysql服务容器,和由docker搭建的分布式Hadoop文件系统,并且使用ApacheSqoop完成将m ...
-
git log 中文乱码问题(浪费了一天)
git log和gitcommit中文出现乱码,花了大半天的时间试了网上的各种方法,还是搞不定. 只好放大招. 卸载软件后重装,还没有进行任何配置,git config --list 发现有大量的配置 ...
-
PyCharm更换sublime类似主题
1. 下载jar主题包 下载地址:https://github.com/spasserby/PyCharm-monokai 2.导入pycharm设置 导入方法:file-->Import Se ...
-
PL/SQL控制结构
顺序结构 按先后顺序 分支判断结构 IF语句 IF condition THEN statements; [ELSIF condition THEN statements;] [ELSE statem ...
-
C/C++预处理器
关于预处理器 首先时预处理器的条件指令 什么是预处理指令? 预处理指令是以#号开头的代码行.#号必须是该行除了任何空白字符外的第一个字符.#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符 ...
-
HDU 1079 Calendar Game (博弈或暴搜)
题意:给定一个日期,然后 A 和 B 双方进行操作,谁先把日期变成2001年11月04日,将获胜,如果超过该日期,则输了,就两种操作. 第一种:变成下一天,比如现在是2001.11.3 变成 2001 ...
-
Android——简易计算器(转)
这是我的第一个andriod小程序,第一次写用了半个月,第二次修改用了一天,第三次修改用了两个小时,现在终于比较满意了.现在我就直接分享一下我的源代码,由于思路比较简单,注释加的不多.采用的是相对布局 ...
-
矩阵经典题目四:送给圣诞夜的礼品(使用m个置换实现对序列的转变)
https://vijos.org/p/1049 给出一个序列,含n个数.然后是m个置换,求对初始序列依次进行k次置换,求最后的序列. 先看一个置换.把置换表示成矩阵的形式.然后将m个置换乘起来.那么 ...
-
python 进程与线程(理论部分)
一.理论部分 一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的 ...
-
自动生成项目的Makefile文件
自动生成项目的Makefile文件 理论基础 跟我一起写 Makefile: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4 ...