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代码执行完毕
executeScript方法如果有返回值,有以下几种情况:1、如果返回一个页面元素(document element), 这个方法就会返回一个WebElement2、如果返回浮点数字,这个方法就返回一个double类型的数字3、返回非浮点数字,方法返回Long类型数字4、返回boolean类型,方法返回Boolean类型5、如果返回一个数组,方法会返回一个List<Object>6、其他情况,返回一个字符串7、如果没有返回值,此方法就会返回null
核心代码如下:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(String script, object... args);
2 executeAsyncScript() 是异步方法,它不会阻塞主线程执行  

这里最后记住一句话,使用js可以进行自动化定位,但是对浏览器支持不佳并且维护麻烦,所以自动化开发的原则是能不用js就不用js。


selenium自动化测试学习4-基本控件介绍相关推荐

  1. PyQt5学习笔记- PyQt5控件介绍

    PyQt5控件介绍 一.控件的概念 二.控件结构继承图 一.控件的概念 一个程序界面上的各个独立的元素(一块矩形区域) 具备不同的功能:用户点击.接受用户输入.展示内容.存放其他控件 初始常用控件:按 ...

  2. App控件定位:Android 控件介绍及元素定位方法

    本文将分享Android相关基础知识和Android APP控件定位工具的使用方法. 目录 Android基础知识 Android布局 Android四大组件 1.activity 2.Service ...

  3. 从零开始学Pyqt5之【控件介绍】(15):绘图类控件QPainter、QPen、QBrush、QPixMap

    从零开始学Pyqt5之[控件介绍](15):绘图类控件QPainter.QPen.QBrush.QPixMap QPainter控件 QPainter控件的作用 QPainter控件常用方法 QPai ...

  4. Android学习:常用控件

    Android学习:常用控件 学习要点:掌握文本框.编辑框.按钮.单选按钮.复选框等基本控件的用法 控件是Android应用程序中用户界面的重要组成元素,正是因为Android应用程序提供了很多具有不 ...

  5. operamasks-ui2.0 +MVC4.0+EF5.0实战之一 开篇及布局控件介绍

    两年前,曾打算自己开发一个web开发框架,把部门.人员.权限.日志作为基本服务加入进去,在其基础上可以做业务快速开发,结果没有坚持下去,仅仅开了个头就夭折了.究其原因,一方面是采用自己完全不熟悉的新技 ...

  6. Flutter 系列文章:Flutter Icon 控件介绍

    Flutter Icon 控件介绍 一.使用方法 构造方法 Icon(this.icon, {Key key,this.size,this.color,this.semanticLabel,this. ...

  7. QT信号与槽-启动系统程序以及相关控件介绍

    1.1 创建一个继承至QWidget的项目. 1.2 设计界面,分析界面采用的布局方式. 首先,每行控件采用水平布局方式,第三行为了使控件靠右,前面添加一个占位控件. 三行采用垂直平局: 选中控件,通 ...

  8. ASP.NET Atlas简单控件介绍——Sys.Component基类与Sys.UI.Control基类

    作者:Dflying Chen (http://dflying.cnblogs.com/) 本系列有三篇文章: ASP.NET Atlas简单控件介绍--Sys.Component基类与Sys.UI. ...

  9. DevExpress控件介绍

    DevExpress ExpressVerticalGrid Suite 3.12 for Delphi BCB (控件)介绍: 这是一款Delphi和C++ builder控件,inverted网格 ...

最新文章

  1. vue与php通过axios进行数据交互
  2. 北理工2017年爬虫目录
  3. sql 临时表_原创 | SQL优化之合理使用临时表
  4. HTTP标准相关的基础概念
  5. jhope代码分析以及网站结构
  6. 54 FI配置-财务会计-固定资产-主数据-更改评估组的关键词
  7. (20)FPGA数据接口同步化
  8. vmw6.5安装Freebsd8.1桌面gnome
  9. Scala 2.8馆藏图书馆是“历史上最长的遗书”吗? [关闭]
  10. springboot启动命令linux,springboot项目命linux环境下命令启动
  11. Cocos2d lua 破解方案集合
  12. VC++鼠标、键盘的模拟操作
  13. 初级工程师该如何去学习,如何去研发开关电源?
  14. minist数据集图片查看
  15. 带你走进缓存世界(1):漫谈缓存
  16. 南大人工智能AI学院夏令营面试经历
  17. Linux 6.2:华为代码加速核心功能 715 倍!
  18. Nutch学习——读源码 Crawl.java
  19. JavaScript 对象增删改查 + 遍历对象+内置函数 + 随机对象
  20. OpenCV字符简单识别

热门文章

  1. 刘汝佳算法竞赛入门经典第三章习题
  2. django使用Q进行复杂查询
  3. ArcMap 打不开
  4. java eclipse如何把项目路径改成自己本地tomcat的路径
  5. 《碟中谍6》阿汤哥:自律是时间的杀手
  6. 【安装教程】Ubuntu18.04中用CMake-gui安装OpenCV4.1.0和OpenCV_contrib-4.1.0(图文)
  7. GD32 SPI DMA收发
  8. python例子高考志愿填报系统入口_2019年四川高考志愿填报系统入口网址登录入口(最新)...
  9. 三款免费的AI绘画网站对比分析,真正好用的居然是它
  10. 江南大学计算机科学专业排名,江南大学热门专业排名