java selenium元素定位大全

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

阅读目录

  1. 自动化测试步骤
  2. 定位方法大全
  3. 如何定位
  4. 通过ID查找元素: By.id()
  5. 通过Name查找元素:By.name()
  6. 通过TagName查找元素: By.tagName()
  7. 通过ClassName 查找元素 By.className
  8. 通过LinkText查找元素 By.linkText();
  9. 通过PartialLinkText 查找元素 By.partialLinkText()
  10. 通过CSS选择器查找元素、
  11. 通过Xpath 查找元素

自动化测试步骤

在自动化测试过程中, 测试程序通常的操作页面元素步骤

1. 找到Web的页面元素,并赋予到一个存储对象中 (WebElement)

2. 对存储页面元素的对象进行操作, 例如:点击链接,在输入框中输入字符等

3. 验证页面上的元素是否符合预期

通过这三个步骤, 我们可以完成一个页面元素的操作, 找到页面元素是很重要的一个步骤。 找不到页面元素,后面就没法做了

Web页面技术的现实复杂性, 造成大量的页面元素很难定位。  经常有人不知道怎么定位。

定位方法大全

使用WebDriver对象的findElement函数定义一个Web页面元素

使用findElements函数可以定位页面的多个元素

定位的页面元素需要使用WebElement对象来存储,以便后续使用

常用的定位页面元素方法如下,   按推荐排序


定位方法


Java语言实现实例


id 定位


driver.findElement(By.id(“id的值”));


name定位


driver.findElement(By.name(“name的值”));


链接的全部文字定位


driver.findElement(By.linkText(“链接的全部文字”));


链接的部分文字定位


driver.findElement(By.partialLinkText(“链接的部分文字”));


css 方式定位


driver.findElement(By.cssSelector(“css表达式”));


xpath 方式定位


driver.findElement(By.xpath(“xpath表达式”));


Class 名称定位


driver.findElement(By.className(“class属性”));


TagName 标签名称定位


driver.findElement(By.tagName(“标签名称”));


Jquery方式


Js.executeScript(“return jQuery.find(“jquery表达式”)”)

 如何定位

在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回元素句柄来定位元素

findElement() 方法返回一个元素, 如果没有找到,会抛出一个异常 NoElementFindException()

findElements()方法返回多个元素, 如果没有找到,会返回空数组, 不会抛出异常

如何选择 定位方法

策略是, 选择简单,稳定的定位方法。

1. 当页面元素有id属性的时候, 尽量使用id来定位。  没有的话,再选择其他定位方法

2. cssSelector  执行速度快, 推荐使用

3. 定位超链接的时候,可以考虑linkText或partialLinkText: 但是要注意的是 ,  文本经常发生改变, 所以不推荐用

4. xpath 功能最强悍。 当时执行速度慢,因为需要查找整个DOM,  所以尽量少用。  实在没有办法的时候,才使用xpath

通过ID查找元素: By.id()

通过页面元素的ID来查找元素是最为推荐的方式, W3C标准推荐开发人员为每一个页面元素都提供独一无二的ID属性

一旦元素被赋予了唯一的ID属性.,  我们做自动化测试的时候,很容易定位到元素.  元素的ID被作为首选的识别属性, 因为是最快的识别策略.

以百度主页为例,  搜索框的HTML示例代码如下,   它的ID为kw

<input type="text" autocomplete="off" maxlength="100" id="kw" name="wd" class="s_ipt">

"百度一下"搜索按钮元素的HTML示例代码如下,   它ID为su

<input type="submit" class="btn self-btn bg s_btn" id="su" value="百度一下">

在Selenium/WebDriver 中通过ID查找元素的Java示例代码如下

WebDriver driver = new FirefoxDriver();
  driver.get("http://www.baidu.com");

  WebElement searchBox = driver.findElement(By.id("kw"));
  searchBox.sendKeys("小坦克 博客园");
  WebElement searchButton = driver.findElement(By.id("su"));
  searchButton.submit();

  driver.close();

 通过Name查找元素:By.name()

以豆瓣网的主页搜索框为例, 其搜索框的HTML代码如下,  它name是: q

<input type="text" autocomplete="off" name="q" placeholder="书籍、电影、音乐、小组、小站、成员" size="12" maxlength="60">

WebDriver中通过name查找豆瓣主页上的搜索框的Java代码如下:

 WebDriver driver = new FirefoxDriver();
  driver.get("http://www.douban.com");

  WebElement searchBox = driver.findElement(By.name("q"));
  searchBox.sendKeys("小坦克");
  searchBox.submit();

 通过TagName查找元素: 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());
   }
  }

通过ClassName 查找元素 By.className 

以淘宝网的主页搜索为例, 其搜索框的HTML代码如下:   class="search-combobox-input"

<input autocomplete="off" autofocus="true" accesskey="s" aria-label="请输入搜索文字" name="q" id="q" class="search-combobox-input" aria-haspopup="true" aria-combobox="list" role="combobox" x-webkit-grammar="builtin:translate" tabindex="0">

Java 示例代码如下

  WebDriver driver = new FirefoxDriver();
  driver.get("http://www.taobao.com");
  Thread.sleep(15000);
  WebElement searchBox = driver.findElement(By.className("search-combobox-input"));

  searchBox.sendKeys("羽绒服");
  searchBox.submit();

注意:使用className 来进行元素定位时, 有时会碰到一个

通过LinkText查找元素 By.linkText();

直接通过超链接上的文字信息来定位元素:例如

<a href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" name="tj_login" class="lb" onclick="return false;">登录</a>

HTML代码如下

 WebDriver driver = new FirefoxDriver();
  driver.get("http://www.baidu.com");
  WebElement loginLink = driver.findElement(By.linkText("登录"));
  loginLink.click();

通过PartialLinkText 查找元素 By.partialLinkText()

此方法是上一个方法的加强版, 单你只想用一些关键字匹配的时候,可以使用这个方法,通过部分超链接文字来定位元素

HTML 代码如下

  WebDriver driver = new FirefoxDriver();
  driver.get("http://www.baidu.com");
  WebElement loginLink = driver.findElement(By.partialLinkText("登"));
  loginLink.click();

注意:用这种方法定位时, 可能会引起的问题是, 当你的页面中不知一个超链接包含“等”时, findElement方法只会返回第一个查找到的元素,而不会返回所有符合条件的元素

如果你想要获得所有符合条件的元素,还是只能用findElements方法。

以上就是java selenium元素定位 的资料整理,后续继续补充相关资料,谢谢大家的支持!

(0)

相关推荐

  • java selenium XPath 定位实现方法

    xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. 阅读目录 什么是xpath xpath定位的缺点 testXpath.html 代码如下 绝对路径定位方式 使用浏览器调试工具,可以直接获取xpath语句 绝对路径的缺点 绝对路径和相对路径的区别 相对路径定位方式 使用索引号定位 使用页面属性定位 模糊定位starts-with关键字 模糊定位contains关键字 text() 函数 文本定位 什么是xpath xpath 是XML Path的简称, 由于H

  • 软件测试面试如何测试网页的登录页面

    软件测试面试如何测试网页的登录页面 这个面试题碰到过很多次, 再次总结下来. 具体需求: 有一个登陆页面, 上面有2个textbox, 一个提交按钮.  请针对这个页面设计30个以上的test case. 此题的考察目的: 面试者是否熟悉各种测试方法,是否有丰富的Web测试经验, 是否了解Web开发,以及设计Test case的能力 这个题目还是相当有难度的, 一般的人很难把这个题目回答好. 功能测试(Function test) 输入正确的用户名和密码,点击提交按钮,验证是否能正确登录. 输入

  • java selenium 常见web UI 元素操作及API使用

    本篇介绍我们如何利用selenium 来操作各种页面元素 阅读目录 链接(link) 输入框 textbox 按钮(Button) 下拉选择框(Select) 单选按钮(Radio Button) 多选框 check box 链接(link) <div> <p>链接 link</p> <a href="www.cnblogs.com/tankxiao">小坦克</a> </div> 链接的操作 // 找到链接元素

  • java selenium使用浏览器调试工具实现方法

    在基于UI元素的自动化测试中, 无论是桌面的UI自动化测试,还是Web的UI自动化测试.   首先我们需要查找和识别UI元素. 在基于Web UI 自动化测试中, 测试人员需要了解HTML, CSS和Javascript的一些知识, 还需要学会使用各种浏览器的调试功能 查找Web UI 页面上的元素, 必须先了解页面的DOM结构, 元素的属性, 甚至一些JavaScript的调用信息.  现在主流的浏览器都自带了很多强有力的工具 阅读目录 Google Chrome Internet Explo

  • 软件测试面试如何测试一个杯子

    软件测试面试如何测试一个杯子 在软件测试的面试中, 经常会碰到类似的问题. 比如:如何测试一个杯子, 或者如何测试一只笔. 要求你设计20个以上的test case. 这类的面试题目,是考察面试者是否熟悉各种软件测试方法, 设计test case的能力, 以及test sense. 首先应该反问下面试官, 需求是什么样的,比如大概是个什么样的杯子. 我回答这类问题的思路, 从软件测试的各种不同方法来联想,  具体如下. 功能测试(Function test) 能否装水, 除了装水, 能否装其他液

  • java selenium 操作浏览器实例

    本篇文章介绍selenium 操作浏览器 阅读目录 浏览器最大化 前进,后退, 刷新 截图操作 模拟鼠标操作 杀掉Windows浏览器进程 浏览器最大化 前进,后退, 刷新 public static void testBrowser(WebDriver driver) throws Exception { driver.get("http://www.cnblogs.com/tankxiao"); Thread.sleep(5000); // 浏览器最大化 driver.manage

  • 一个软件测试工程师的加班经历

    海交通大学计算机学士,企业管理硕士.现任职于英特尔中国软件实验室,从事嵌入式Linux相关的开发工作.PMT Community发起人之一,PMT是一个由软件行业专业人士自发组成的非营利性团体,致力于软件技术和管理的研究与实践.      写下这段流水帐似的周末加班经历,并不是因为无聊.只是老婆要我交待,一个"臭"(这个字眼只有很少机会享用)做软件的,老是这么晚回来,究竟在外面做些什么.如果哪天你也被要求写这样的材料,你可以参考:除了这个作用以外,或许,不同的人会从中看到不同的东西吧.

  • 流行的软件测试工具介绍

    英文原版书籍下载:https://bitbucket.org/xurongzhong/python-chinese-library/downloadss. 精品文章推荐: python 2.7 中文教程及自动化测试介绍 使用Python学习selenium测试工具 性能测试艺术 Java单元测试之模拟利器-使用PowerMock进行Mock测试 网络工具ATC 主页 http://facebook.github.io/augmented-traffic-control/ 代码托管:https:/

  • 软件测试方法大汇总

    软件测试方法大汇总 软件测试方法种类繁多,记忆起来混乱, 如果把软件测试方法进行分类, 就会清晰很多. 我参考一些书籍和网上的资料, 把常用的软件测试方法列出来, 让大家对软件测试行业有个总体的看法. 从测试设计方法分类 测试名称 测试内容 Black box黑盒测试 把软件系统当作一个"黑箱",无法了解或使用系统的内部结构及知识.从软件的行为,而不是内部结构出发来设计测试. White box白盒测试 设计者可以看到软件系统的内部结构,并且使用软件的内部知识来指导测试数据及方法的选择

  • java selenium操作弹出对话框示例讲解

    Web 开发人员通常需要利用JavaScript弹出对话框来给用户一些信息提示, 包括以下几种类型 阅读目录 对话框类型 测试页面 Selenium 操作对话框的代码 对话框类型 1.  警告框: 用于提示用户相关信息的验证结果, 错误或警告等 2. 提示框: 用于提示用户在当前对话框中输入数据,一般需要用户单击取消或者确认按钮 3. 确认框: 用于提示用户确认或者取消某个操作,一般需要用户单击取消或者确认按钮 测试页面 用如下页面为例进行讲解, 包括了警告框,提示框,确认框 http://si

随机推荐