要做自动化,首先要了解页面结构,要了解页面结构,就要了解页面元素的定位方法
在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素。
常用的元素定位方法如下:

如何选择 定位方法
  策略是:选择简单,稳定的定位方法。
  1. 当页面元素有id属性的时候, 尽量使用id来定位。  没有的话,再选择其他定位方法
  2. cssSelector  执行速度快, 推荐使用
  3. 定位超链接的时候,可以考虑linkText或partialLinkText:但是要注意的是 , 文本经常发生改变, 所以不推荐用
  4. xpath 功能最强悍。 但是执行速度慢,因为需要查找整个页面元素,  所以尽量少用。  实在没有办法的时候,才使用xpath

部分定位详解,因为其他都比较简单
1、By.tagName()
  通过tagName来搜索元素的时候,会返回多个元素. 因此需要使用findElements()
  WebDriver driver = new FirefoxDriver();
  driver.get("http://www.cnblogs.com");
  List<WebElement> buttons = driver.findElements(By.tagName("div"));
  System.out.println("Button:" + buttons.size());
注意: 如果使用tagName, 要注意很多HTML元素的tagName是相同的,
  比如单选框,复选框, 文本框,密码框.这些元素标签都是input. 此时单靠tagName无法精确获取我们想要的元素, 还需要结合type属性,才能过滤出我们要的元素
  WebDriver driver = new FirefoxDriver();
  driver.get("http://www.cnblogs.com");
  List<WebElement> buttons = driver.findElements(By.tagName("input"));
  for (WebElement webElement : buttons) {
    if (webElement.getAttribute("type").equals("text")) {
      System.out.println("input text is :" + webElement.getText());
    }
  }
 
2、Xpath定位
2.1.什么是xpath:xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。
  2.2.xpath定位的缺点 xpath 这种定位方式, webdriver会将整个页面的所有元素进行扫描以定位我们所需要的元素, 这是个非常费时的操作,  如果脚本中大量使用xpath做元素定位的话, 脚本的执行速度可能会稍慢
  例如 testXpath.html 代码如下
  <html>
  <head><title>Test Xpath</title></head>
    <body>
        <div id="div1">
        <input name="div1input"></input>
          <a href="http://www.sogou.com">搜狗搜索</a>
          <img alt="div1-img1" src="http://www.sogou.com/images/logo/new/sogou.png" href="http://www.sogou.com">搜狗图片</img>
        <input type="button" value="查询"></input>
        </div>
          <br />
            <div name="div2">
              <input name="div2iniput" /></input>
              <a href="http://www.baidu.com">百度搜索</a>
              <img alt="div2-img2" src="http://www.baidu.comn/img/bdlogo.png" href="http:/www.baidu.com">百度图片</img>
        </div>
      </body>
    </html>
 
   绝对路径定位方式
    在被测试网页中, 查找第一个div标签中的按钮
    XPath的表达式:/html/body/div/input[@value="查询"]
      WebElement button = driver.findElement(By.xpath("/html/body/div/input[@value='查询']"));
  绝对路径的缺点
    1. 一旦页面结构发生改变,改路径也随之失效,必须重新。 所以不推荐使用绝对路径的写法
 
  绝对路径和相对路径的区别
    绝对路径  以 "/"  开头, 让xpath 从文档的根节点开始解析
    相对路径  以"//" 开头, 让xpath 从文档的任何元素节点开始解析
 
    相对路径定位方式
    在被测试网页中,查找第一个div标签中的按钮
    XPath的表达式://input[@value="查询"]
      WebElement button = driver.findElement(By.xpath("//input[@value='查询']"));
 
3、表格定位
  
举例1:
  driver.navigate().to("http://www.w3school.com.cn/html/html_tables.asp");
    //获取所有的tr集合
    List<WebElement> rows=driver.findElements(By.className("dataintable"));
      //验证表格的行数
      // assertEquals(11, rows.size());
      //打印出所有单元格的数据
    for(WebElement row : rows){
      //等到当前tr里的td集合
      List<WebElement> cols=driver.findElements(By.tagName("td"));
        for(WebElement col : cols){
           System.out.println(col.getText()); //得到td里面的文本
        }
        System.out.println();
    }
举例2:
思路:层级定位,先定位table,在定位tr,在定位td
String url="table的地址";
driver.get(url);
String str="第一行第一列";
String str1="第三行第一列";
 WebElement Table = driver.findElement(By.tagName("table"));
//java里打印元素类型 Sydtem.out.print(driver.findElement(By.tagName("table")).getClass());
//table有那么多行,定位在哪一行呢?--》默认都是第一行
// 所以就不能用 Table.findElement(By.tagName("tr")),findElement是定位单一的一个元素的方法,定位一组用findElements
// Table.findElement(By.tagName("tr"));//这种方式取到的是一个数组,就不是一个对象了,所以以下方法是正确的
List < WebElement> rows = Table.findElements(By.tagName("tr"));
for( WebElement row : rows){
List <WebElement> tds = row.findElements(By.tagName("td"));
for( WebElement td : tds){
// System.out.print(td.getText()+"\n"); //取出所有元素
String value=td.getText();
// if(value==str){ 为什么不能用= =,因为value是一个对象
if(value.equals(str) || value.equal(str1)){
System.out.print(value+"\n");
}else{
System.out.print("error"+"\n");
}
}
}
 

selenium元素定位大全的更多相关文章

  1. 自动化测试基础篇--Selenium元素定位

    摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...

  2. Selenium3 + Python3自动化测试系列二——selenium元素定位

    一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...

  3. selenium元素定位之css选择器

    在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...

  4. selenium元素定位陷阱规避

    为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...

  5. java selenium (五) 元素定位大全

    页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 阅读目录 自动化测试步骤 ...

  6. selenium元素定位篇

    Selenium webdriver是完全模拟用户在对浏览器进行操作,所有用户都是在页面进行的单击.双击.输入.滚动等操作,而webdriver也是一样,所以需要我们指定元素让webdriver进行单 ...

  7. python学习之——selenium元素定位

    web自动化测试按步骤拆分,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 其中定位元素尤为关键,此篇是使用webdriver通过页面各个 ...

  8. python selenium 元素定位(三)

    上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...

  9. selenium元素定位不到之iframe

    我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ...

随机推荐

  1. Phpcms 前台页面实现分页

    phpcms开发就是模仿里面原有的方法进行扩展,前台要实现分页,就去找后台页面的分页实现. 如后台 扩展->后台操作日志,就有分页展示. 1.先去添加自己的分页方法(千万不要在原来的方法上修改, ...

  2. MySQL5.6.36 linux rpm包安装配置文档

    一.卸载自带mysql,删除MySQL的lib库,服务文件 [root@localhost ~]#rpm -qa|grep mysql qt-mysql-4.6.2-26.el6_4.x86_64 m ...

  3. 认识cpu、核与线程

    作为一个后台开发人员,我想有必要了解这些基础知识.如果本文有不严谨或者疏忽的地方,请指正. cpu与核心 物理核 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数 虚拟核 所谓的4核 ...

  4. sudo 和su

    场景:在服务器上进行操作的时候通常不适用root用户,但是有时候执行某一些操作需要使用root权限... 1 su命令 使用su命令来切换用户,su是switch user切换用户的缩写. 可以是从普 ...

  5. Java 9 揭秘(18. Streams API 更新)

    Tips 做一个终身学习的人. 在本章中,主要介绍以下内容: 在Stream接口中添加了更加便利的方法来处理流 在Collectors类中添加了新的收集器(collectors) JDK 9中,在St ...

  6. 打造 高性能,轻量级的 webform框架---js直接调后台(第二天)

    问题2: 每次与后台打交道 都需要写一些自己都看不太懂的事件,而且传参数很麻烦,这就是.net 封装的事件,如何解决呢?        首先以为webfrom事件,都需要写 服务器控件来绑定后台的事件 ...

  7. Ubuntu16.04配置Mac主题

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7072878.html 觉得有帮助?欢迎来打赏 Ubuntu配置Mac主题 下 ...

  8. .NET Core 成都线下面基会拉开序幕

    2017年07月29日下午,由 .NET China Foundation 成都小组组织的 .NET Core 成都地区线下技术交流会在成都成华区某茶楼成功举行,这也是成都地区 .NET Core 非 ...

  9. 一步一步深入理解Dijkstra算法

    先简单介绍一下最短路径: 最短路径是啥?就是一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两顶点之间经过的边上权值之和最小的路径. 并且我们称路径上的第 ...

  10. webpack开发与生产环境配置

    前言 作者去年就开始使用webpack, 最早的接触就来自于vue-cli.那个时候工作重点主要也是 vue 的使用,对webpack的配置是知之甚少,期间有问题也是询问大牛 @吕大豹.顺便说一句,对 ...