selenium元素定位大全

要做自动化,首先要了解页面结构,要了解页面结构,就要了解页面元素的定位方法

在使用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");

}

}

}

时间: 2024-11-08 18:20:24

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

Selenium元素定位学习教程

无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元素的过程.这一篇我们就一起学习Selenium以及它是如何定位DOM元素的.本文将会介绍如下内容: Selenium DOM 主要的定位方式. Selenium 如何扩展元素定位方式. 辅助浏览器工具 (一)Selenium DOM主要定位方式 上一篇中,我们介绍了WebDriver和 WebEle

java selenium (五) 元素定位大全

页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 阅读目录 自动化测试步骤 在自动化测试过程中, 测试程序通常的操作页面元素步骤 1. 找到Web的页面元素,并赋予到一个存储对象中 (WebElement) 2. 对存储页面元素的对象进行操作, 例如:点击链接,在输入框中输入字符等 3. 验证页面上的元素是否符合预期 通过这三个步骤, 我们可以完成一个页面元素的操作, 找

selenium元素定位不到的解决方式

1.如果确信自己的元素的地址写的事正常的,但是就是没有反应的话可以试试切换Frame下 代码为: driver.switch_to.frame("mainFrame") 用完之后记得切换回原来的 driver.switch_to.default_content() 2.对xpath 和css元素定位不是很清楚的话,可以使用的firefox的工具,selenium IDE,通过脚本录制在导出,查看脚本文件,可以很快定位到元素的位置 3.有些元素在打开文件之后,需要一定的等待时间,可以加上

python selenium 元素定位(三)

上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到这个元素,我们从能对这个元素进行操作,那么我们下来看看如何来定位元素. selenium 提供了8中元素定位的方法(大家要学习元素的定位,首先可以学习下前端的基础知识,这样有利于我们学习自动化测试,大家可以看一下:http://www.runoob.com/) find_element_by_id

selenium元素定位

1.元素定位 在本章中,我们将讨论 u 使用浏览器工具来检查页面中元素的结构 u 使用findElement方法定位元素 u 使用findElements方法来定位元素 u 定位链接 u 通过标签名称定位元素 u 使用CSS选择器定位元素 u 使用XPath定位元素 u 使用文本定位元素 u 使用高级CSS选择器定位元素 u 使用jQuery选择器 u 定位表格的行和列 u 定位表格中的子元素 1.1.介绍 成功的自动化GUI(图形用户界面)测试取决于从被测试的应用程序中识别和定位GUI元素,然

selenium元素定位不到之iframe

我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等,但在定位此元素的时候就是报错,提示: selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element 问题原因:元素定位不到 问题分析:通过firebug可以看到,但就是定位不到,这时候很有可能

selenium元素定位(三)

使用selenium就不可避免的要提到界面元素定位,通过元素定位来实现一系列的逻辑操作. selenium提供了8中元素定位的方式: id.name.class name.tag name.link text.partial link text.xpath.css selector. 其中使用xpath来根据id或class来定位元素的可以解决大部分问题. 这8中定位方式在python selenium中使用的对应具体方法为: 1 find_element_by_id() 2 find_elem

Java + selenium 元素定位(5)之By Xpath

这篇关于Xpath方法的文章和之前那篇CSS的方法一样,使用前,需要先掌握一些Xpath的相关知识.当然,网上也有各种工具可以帮助我们获取到元素的Xpath,但是这并不代表着我们就可以不用了解Xpath的相关知识,毕竟依赖工具永远没有依赖自己来着靠谱.但是我也会介绍一下如果简单快速的获取元素的Xpath. 我尝试过使用一些文章介绍的快速获取Xpath的工具,但是可能因为这些工具都是依赖于浏览器的扩展工具,更新换代比较快,所以文章介绍的工具我并没有成功找到.我在这里要介绍的方法,不需要使用额外的工

selenium元素定位方法介绍

元素定位方法 元素名称 webdriver API id find_element_by_id() name find_element_by_name() class name find_element_by_class_name() tag name find_element_by_tag_name() link text find_element_by_link_text() partial link text find_element_by_partial_link_text() xpat