selenium自动化测试学习4-基本控件介绍
1.引入
可以定位到各种元素了,剩下的就是操作各种控件了。需要注意的是,从这里开始我们对编程的要求会非常高,大家书写代码的时候要把握住JAVA思想。学会运用面向对象的特性。
比如我们现在要打开一个火狐浏览器,输入百度网址,打开后进行关闭,此时我们实现此功能书写的代码如下所示:
package com.selenium.sem; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; class Driver{public WebDriver driver;//定义初始化浏览器的方法public void startFirefox(){driver = new FirefoxDriver();}//将浏览器的窗体最大化public void maxWindow(){driver.manage().window().maximize();}//跳转到百度首页public void goTo(){driver.navigate().to("file:///F:/selenium_video/demo/demo.html");}//关闭浏览器public void close(){driver.close();} } public class ElementOne {public static void main(String[] args) {Driver dv = new Driver();dv.startFirefox();dv.maxWindow();dv.goTo();dv.close();} }
下面我们针对测试模板中的各个控件进行操作。
2.控件定位以及操作
2.1input输入框
实现代码:
public void input(){driver.findElement(By.xpath("//input[@id='user']")).sendKeys("abc");driver.findElement(By.xpath("//input[@id='user']")).clear();
}
需要说明的是,input作为输入框,后面的操作可以调用:sendKeys()方法,输入数据。还可以调用clear()方法,清空输入框。
2.2超链接
实现代码:
public void link(){driver.findElement(By.xpath("//a[text()='baidu']")).click();}
超链接定位到之后,操作方法常用的只有一个:click()点击操作。
2.3下拉菜单select
这个下拉菜单其实是很麻烦的,我们看图中的内容,我们都应该需要学习哪些问题的解决方式:
(1)如何获取到下拉菜单的元素个数,图中是Volvo、Saab、Opel、Audi四个。
(2)如何遍历四个下拉菜单元素。
(3)如何打印出定位的元素内容。
说明【1】必须优先导入下述的包,才能支持Select类的相关方法。
import org.openqa.selenium.support.ui.Select;
说明【2】要想选择Volvo、Saab、Opel、Audi中的任何一个,方法有三个:此时这三个方法得到的结果是一致的。
先看下html代码如下:
<select name="select"> <option value="volvo">Volvo</option> <option value="saab">Saab</option> <option value="opel">Opel</option> <option value="audi">Audi</option> </select>
.selectByIndex(index)index为元素所在的位置,从0开始 .selectByValue(Value)value是option标签的一个属性值,并不是显示在下拉框中的值,即value=后面的值 .selectByVisibleText(text)是在option标签中间的值,是显示在下拉框的值,即为Volvo、Saab、Opel、Audi中的任何一个值。
说明【3】既然有选择项,那么也应该有取消选择项。此时的方法还是有四个:
.deselectAll--全部取消
.deselectByVisibleText
.deselectByValue
.deselectByIndex,注意事项与选择时的一致。
说明【4】我们选择上之后,想看看现在所选择的是不是我们需要的标签,所以我们可以将选中的内容进行打印输出,此时需要调用如下方法:
.getAllSelectedOptions()返回所有被选中的options
.getOptions()返回当前这个select所有的optiongs(不管选中不选中都返回)
.getFirstSelectedOption()返回第一个被选中的option。
以上所有说明实现的代码如下所示:
public void option(){//定位到下拉菜单的全部元素WebElement elements = driver.findElement(By.cssSelector("#select>select"));//把elements赋值给selectSelect select = new Select(elements);select.selectByVisibleText("Saab");//打印输出第一个选中的optionString s = select.getFirstSelectedOption().getText();System.out.println(s);//以下代码实现循环输出当前select下所有的optionsList<WebElement> list = select.getOptions();//循环输出前获取下长度:int wesize = list.size();System.out.println(wesize);Iterator<WebElement> iter = list.iterator();while(iter.hasNext()){String we = iter.next().getText();System.out.println(we);} }
2.4单选RadioBox
首先先记住,定位radiobox使用的是findelements(),不能在使用findelement()方法;采用findelements()所以其返回值为List列表;
说明【1】请看下面源码:
<div id="radio"> <input class="Volvo" type="radio" name="identity"/> <label>Volvo</label> <br/> <input class="Saab" type="radio" name="identity"/> <label>Saab</label> <br/> <input class="Opel" type="radio" name="identity"/> <label>Opel</label> <br/> <input class="Audi" type="radio" name="identity"/> <label>Audi</label> </div>
此时我们定位的时候要使用://input[@name='identity']定位到所有name=identity的值。
说明【2】看实现代码:
public void radio(){//定位radiobox返回的是一组元素List<WebElement> listone = driver.findElements(By.xpath("//input[@name='identity']"));//请注意数组使用前必须进行判空操作,否则会报数组越界异常 if (listone!=null&&listone.size()>0) {try {//定位到其中一个元素,get()方法的下标从0开始WebElement element = listone.get(0); element.click();boolean bl = element.isSelected();System.out.println(bl);
} catch (Exception e) {System.out.println("数组越界");}}else{System.out.println("判空失败");}}
定位到具体元素时,使用get()方法,其下标从0开始;
使用List之前需要进行判空操作;
将可能抛出数组越界的语句最好写在try...catch语句块中;
radiobox的动作只有click()点击操作。
选择后要定义一个boolean类型来判断下自己的选择是否成功。
2.5多选checkbox
源码如下:
<div id="checkbox"> <input type="checkbox" name="checkbox1"/> <label>Volvo</label> <br/> <input type="checkbox" name="checkbox2"/> <label>Saab</label> <br/> <input type="checkbox" name="checkbox3"/> <label>Opel</label> <br/> <input type="checkbox" name="checkbox4"/> <label>Audi</label> </div>
说明【1】如果我们此时想要选中Opel和Audi,代码实现为:
public void checkbox(){List<WebElement> listtwo = driver.findElements(By.xpath("//input[@type='checkbox']"));WebElement ele_check = listtwo.get(2);ele_check.click();WebElement ele_check1 = listtwo.get(3);ele_check1.click();}
说明【2】如果我们选中之前,即有一个默认项Opel被选中,如果此时我们想遍历选择四个checkbox。如果我们在对Opel进行click点击操作的话,其不被选择了。所以此时我们在单击前应该对其进行判断。代码实现如下:
public void checkbox(){List<WebElement> listtwo = driver.findElements(By.xpath("//input[@type='checkbox']"));//int twosize = listtwo.size();for (int i = 0; i < listtwo.size(); i++) {WebElement ele_check = listtwo.get(i);if (ele_check.isSelected()) {System.out.println("我已经被选中,无需在选");}else{ele_check.click();}}}
2.6按钮button
源码如下:
<div id="button"> <input class="button" type="button" disabled="disabled" value="Submit"/> </div>
这里有个非常重要的说明:disabled="disabled"这个属性决定这个按钮不能点击,如果我们想定位到这种属性为disable(即置灰不可点击的按钮),需要使用javascript。
说明【1】对于属性为disabled不可见的,首先我们需要把其设置为可见,然后即可点击到,为了实现此功能我们必须先补充一些selenium中对js的支持。
【selenium对javascript支持的说明】
【1】首选需要导入包:import org.openqa.selenium.JavascriptExecutor;没有这个包的导入其他都是空谈。
【2】支持的方法有两个:
序号 | 方法 | 特点 | 描述 |
1 | executeScript() | 同步方法,用它执行js代码会阻塞主线程执行,直到JS代码执行完毕 |
|
2 | executeAsyncScript() | 是异步方法,它不会阻塞主线程执行 |
这里最后记住一句话,使用js可以进行自动化定位,但是对浏览器支持不佳并且维护麻烦,所以自动化开发的原则是能不用js就不用js。
selenium自动化测试学习4-基本控件介绍相关推荐
- PyQt5学习笔记- PyQt5控件介绍
PyQt5控件介绍 一.控件的概念 二.控件结构继承图 一.控件的概念 一个程序界面上的各个独立的元素(一块矩形区域) 具备不同的功能:用户点击.接受用户输入.展示内容.存放其他控件 初始常用控件:按 ...
- App控件定位:Android 控件介绍及元素定位方法
本文将分享Android相关基础知识和Android APP控件定位工具的使用方法. 目录 Android基础知识 Android布局 Android四大组件 1.activity 2.Service ...
- 从零开始学Pyqt5之【控件介绍】(15):绘图类控件QPainter、QPen、QBrush、QPixMap
从零开始学Pyqt5之[控件介绍](15):绘图类控件QPainter.QPen.QBrush.QPixMap QPainter控件 QPainter控件的作用 QPainter控件常用方法 QPai ...
- Android学习:常用控件
Android学习:常用控件 学习要点:掌握文本框.编辑框.按钮.单选按钮.复选框等基本控件的用法 控件是Android应用程序中用户界面的重要组成元素,正是因为Android应用程序提供了很多具有不 ...
- operamasks-ui2.0 +MVC4.0+EF5.0实战之一 开篇及布局控件介绍
两年前,曾打算自己开发一个web开发框架,把部门.人员.权限.日志作为基本服务加入进去,在其基础上可以做业务快速开发,结果没有坚持下去,仅仅开了个头就夭折了.究其原因,一方面是采用自己完全不熟悉的新技 ...
- Flutter 系列文章:Flutter Icon 控件介绍
Flutter Icon 控件介绍 一.使用方法 构造方法 Icon(this.icon, {Key key,this.size,this.color,this.semanticLabel,this. ...
- QT信号与槽-启动系统程序以及相关控件介绍
1.1 创建一个继承至QWidget的项目. 1.2 设计界面,分析界面采用的布局方式. 首先,每行控件采用水平布局方式,第三行为了使控件靠右,前面添加一个占位控件. 三行采用垂直平局: 选中控件,通 ...
- ASP.NET Atlas简单控件介绍——Sys.Component基类与Sys.UI.Control基类
作者:Dflying Chen (http://dflying.cnblogs.com/) 本系列有三篇文章: ASP.NET Atlas简单控件介绍--Sys.Component基类与Sys.UI. ...
- DevExpress控件介绍
DevExpress ExpressVerticalGrid Suite 3.12 for Delphi BCB (控件)介绍: 这是一款Delphi和C++ builder控件,inverted网格 ...
最新文章
- vue与php通过axios进行数据交互
- 北理工2017年爬虫目录
- sql 临时表_原创 | SQL优化之合理使用临时表
- HTTP标准相关的基础概念
- jhope代码分析以及网站结构
- 54 FI配置-财务会计-固定资产-主数据-更改评估组的关键词
- (20)FPGA数据接口同步化
- vmw6.5安装Freebsd8.1桌面gnome
- Scala 2.8馆藏图书馆是“历史上最长的遗书”吗? [关闭]
- springboot启动命令linux,springboot项目命linux环境下命令启动
- Cocos2d lua 破解方案集合
- VC++鼠标、键盘的模拟操作
- 初级工程师该如何去学习,如何去研发开关电源?
- minist数据集图片查看
- 带你走进缓存世界(1):漫谈缓存
- 南大人工智能AI学院夏令营面试经历
- Linux 6.2:华为代码加速核心功能 715 倍!
- Nutch学习——读源码 Crawl.java
- JavaScript 对象增删改查 + 遍历对象+内置函数 + 随机对象
- OpenCV字符简单识别
热门文章
- 刘汝佳算法竞赛入门经典第三章习题
- django使用Q进行复杂查询
- ArcMap 打不开
- java eclipse如何把项目路径改成自己本地tomcat的路径
- 《碟中谍6》阿汤哥:自律是时间的杀手
- 【安装教程】Ubuntu18.04中用CMake-gui安装OpenCV4.1.0和OpenCV_contrib-4.1.0(图文)
- GD32 SPI DMA收发
- python例子高考志愿填报系统入口_2019年四川高考志愿填报系统入口网址登录入口(最新)...
- 三款免费的AI绘画网站对比分析,真正好用的居然是它
- 江南大学计算机科学专业排名,江南大学热门专业排名