Selenium教程系列(二):元素查找及操作

Selenium教程系列(二):元素查找及操作 上一篇教程写了个Demo实现了打开百度的首页那打开网页肯定是要操作网页的那怎么操作呢一个网页会有很多的元素那我们第一步就肯定是找到要操作的元素了首先我们简单写一个html页面新建一个记事本然后把以下代码复制进去!doctype html html langen head meta charsetUTF-8 meta nameGenerator contentEditPlus® meta nameAuthor content meta nameKeywords content meta nameDescription content titleDocument/title /head body input idun classcss1 nameusername / input idpw classcss2 lala namepassword / input idco classcss3 namecode /br / input typebutton idbtn classcss4 namesubmit value按钮 / script document.getElementById(btn).onclick function(){ alert(haha); } /script /body /html保存然后更改后缀为html这里我存在桌面名称为test.html然后双击它就会用浏览器打开当然如果你默认浏览器是IE的话那么就是使用IE浏览器打开。也是一样的不影响打开以后把地址栏里的地址复制一下贴粘到java代码里替换掉原先写的百度首页的网址然后运行脚本就会使用谷歌浏览器打开测试页面了。那现在这个页面有三个输入框和一个按钮我们现在要操作这几个元素。selenium查找网页元素有好几种方式。在整个页面找那就是用driver.findElement方法。当然也可以在某一个元素里面找。那就是使用元素的findElement方法了。通过eclipse工具我们可以看到查找元素的方法有这么几个className、cssSelector、id、linkText、name、partialLinkText、tagName、xpath。className就是通过元素的class来定位元素。在页面上一个元素是可以有多个class的像我们写的案例第二个input标签 输入框就有css2和lala两个class。所以通过css2和lala都可以定位到这个input。但同时多个标签也可以使用同一个class所以通常情况下通过className来定位元素都是使用driver.findElements方法也就是找出多个元素然后再通过下标获取到想要的元素。使用driver.findElement方法如果有多个也只会返回找到的第一个。cssSelector这个基本可以忽略使用这个方法你得需要一些前端的知识。前端在写css的时候怎么定位一个元素是有一定的语法的而这个方法就是使用css定位元素的语法。比如#aaa .css3这个就表示id为aaa的元素下class为css3的元素。id就是通过元素的id属性来查找元素在一个页面中一个id通常只会定位到一个元素。通过id来查找元素效率是最高的但很多元素通常是没有id的。linkText就是通过a标签之间的文本。来定位a标签。比如我们打开百度的首页右上角这个新闻就是一个a标签。By.linkText(新闻)就可以定位到这个元素。name就是通过元素的name属性来定位元素。通常情况下只有表单元素才会有name属性。partialLinkText顾名思义就是通过a标签的部分文本来定位tagName就是通过标签名来定位元素。xpath就是利用xpath的语法来定位元素。xpath是XML文档定位节点元素的一种语法HTML也是标准的XML文档所以就可以使用xpath来查找HTML文档的元素。通过xpath查找元素效率不是很高。但这也只是以前现在电脑的配置都比较高了。这点性能的影响基本上是可以忽略了。同时现在前端一般都是使用React.js、Vue.js、Angular.js等框架使用这些框架一般都不会给元素加id、name属性。所以通过id、name找元素的方式就很难行得通了这个时候还就得使用万能的xpath。关于xpath的语法规则后面会详细地讲。好了那我们现在就使用这些方法来操作页面的元素代码Test public void test222() throws Exception { // 打开测试页面 driver.get(file:///C:/Users/Administrator/Desktop/test.html); //通过id找到第一个输入框 WebElement un driver.findElement(By.id(un)); //第一个输入框输入aaa un.sendKeys(aaa); //通过className找到第二个输入框 WebElement pw driver.findElement(By.className(lala)); //第二个输入框输入bbb pw.sendKeys(bbb); //通过name找到第三个输入框 WebElement co driver.findElement(By.name(code)); //第三个输入框输入ccc co.sendKeys(ccc); Thread.sleep(2000); //找到页面所有的input标签 ListWebElement inputs driver.findElements(By.tagName(input)); //获取第4个input标签即按钮 WebElement btn inputs.get(3); //点击按钮 btn.click(); Thread.sleep(3000); }这里我只贴了Test部分的代码Before和After部分的代码和之前都是一样的。后面也一直是这样这两部分的代码基本上是固定的。获取到一个web元素之后就可以操作这个web元素通过eclipse可以查看有哪些方法。这里只介绍常用的几个方法。clear这个方法通常用于清空输入框的内容click点击元素findElement、findElements就是在元素里面找子元素了和driver的使用一样getAttribute获取元素的属性。在我们写的案例里面input标签的id、class、name、value等都是属性getTagName获取元素的标签名getText获取标签的文本双标签才有文本。我们写的案例中input是单标签是没有文本的。divasdf/div类似这样的为双标签那么获取它的文本就是asdf。如果标签里面还是子标签子标签是不算作文本的。sendKeys输入内容一般是输入框才会使用这个方法。三个is开头的方法isDisplayed元素是否显示在页面上元素是可以设置为隐藏或是不显示状态的但它在文档里却是存在的。你没看见不代表不存在请记住这句话。isEnabled元素是否可交互也就是我们常说的启用/禁用状态了。isSelected元素是否被选中一般是单选按钮复选按钮及下拉选择框会用到这个判断。欢迎加入测试群91425817一起讨论测试的那此事。