当前位置: 首页 > news >正文

Selenium实战教程系列(二)---元素定位

Selenium webdriver能够模拟人对浏览器进行操作的前提是界面元素的定位。元素的定位可以说是Selenium自动化脚本的基础。这一小节笔者将介绍如何在selenium中进行元素的定位。

定位元素的方法

Selenium中提供了以下定位元素的方法:
首先看一个HTML文件 test_page.:

<html>
    <body>
        <form class="form-test" name="register" action="success.html" method="post">
    <h3>注册账号</h3>
    <a href="/home">Home Page</a>
    <table bgcolor="aqua">
        <tr>
            <td>昵称:</td>
            <td><input id="input username" type="text" name="username" class="input"></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="text" name="password"></td>
        </tr>
        <tr>
            <td>确认密码:</td>
            <td><input type="text" name="confPassword"></td>
        </tr>
        <tr>
            <td>性别:</td>
            <td>
                <input type="radio" name="sex" value="man" checked>男
                <input type="radio" name="sex" value="woman">女
                </td>
            </tr>
        </table>
    </form>
    </body>
 </html>

1. id

通过元素的id来完成username输入框的定位。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by id
dr.find_element(:id, 'input username').click

2.name

通过元素的name属性来完成对username输入框的定位。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by name
dr.find_element(:name, 'username').click

3. class name

通过元素的class属性来完成对username输入框的定位。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by name
dr.find_element(:class, 'input').click

4. link text和partial link text

通过链接元素的text属性来完成Home Page链接的定位。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by link_text
link_text = dr.find_element(:link_text, 'Home Page').get_text
puts link_text

# by partial_link_text
link_text = dr.find_element(:partial_link_text, 'Home').get_text
puts link_text

5. tag name

通过标签的name来完成header元素的定位

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by tag name
header_text = dr.find_element(:tag_name, 'h3').get_text
puts header_text

6. xpath

xpath是用来定位HTML文档中元素的通用方法,有一套自己的语法规则,支持各种函数,可以说是一种最全面的定位方法。我在开发Selenium自动化用例的过程中,最多使用的就是xpath。
这里只用简单的例子说明xpath的定位使用,具体的xpath的使用将在另外的专题中介绍。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by xpath
dr.find_element(:xpath, "//tr/td/input[@value='women']").click

7. css selector

css selector和xpath一样,也是功能非常强大的定位方法。但是与xpath不同,css selector只能支持向后定位,而xpath可以支持向前和向后定位。
下面的例子讲展示如何用css selector定位xpath例子中的同一个元素。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by css selector
dr.find_element(:css, "tr>td>input[value='women']").click

定位一组元素

Selenium中支持同时获取一组元素的定位,这在处理多选项选择,或者表格元素的时候非常有用。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# Get number of items
num_of_tds = dr.find_elements(:tag_name, "td").count

相关文章:

  • Spark内置框架rpc通讯机制及RpcEnv基础设施-Spark商业环境实战
  • ZooKeeper应用——解决分布式系统单点故障
  • 扩展rocketMQ延迟等级
  • echarts花样作死的坑
  • 那些年让你迷惑的阻塞、非阻塞、异步、同步
  • Cloudopt-logger — Kotlin 实现的日志框架扩展
  • Linux日记本_04:阿里云ECS服务器(CentOS7)端口设置以及 MySQL数据库搭建
  • [js]- 两个对象的合并(Object.assign)
  • 火币交易细则
  • 阿里云服务器配置过程
  • redirectTo、navigateTo与switchTap区别
  • python3 猜数字小游戏2.0
  • python函数式编程一
  • .NET性能优化(文摘)
  • CentOS 7.5 运维之路之网络配置
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Android框架之Volley
  • AWS实战 - 利用IAM对S3做访问控制
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Git的一些常用操作
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java比较器对数组,集合排序
  • nodejs调试方法
  • python3 使用 asyncio 代替线程
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 百度小程序遇到的问题
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何解决微信端直接跳WAP端
  • 删除表内多余的重复数据
  • 实现简单的正则表达式引擎
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 走向全栈之MongoDB的使用
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # Panda3d 碰撞检测系统介绍
  • (6)设计一个TimeMap
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (万字长文)Spring的核心知识尽揽其中
  • (转)jdk与jre的区别
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .FileZilla的使用和主动模式被动模式介绍
  • .net 8 发布了,试下微软最近强推的MAUI