一、元素定位

1. 如何进行元素定位?

元素定位就是通过元素的信息或元素层级结构来定位元素的

2.定位工具

浏览器开发者工具

3.元素定位方式

Selenium提供了八种定位元素方式

  • id
  • name
  • class_name(使用元素的class属性定位)
  • tag_name(标签名 <标签名 ..../>)
  • link_text(定位超链接a标签)
  • partial_link_text(定位超链接 a标签 模糊)
  • xpath(基于元素路径)
  • css(元素选择器)

3.1 id定位

说明:id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档中必须是唯一的

前提:元素有id属性

id一般情况下在当前页面中是唯一的

id定位方法

  1. element = driver.find_element_by_id(id)

案例

需求:打开一个注册页 ,完成以下操作

  1. 使用id定位,输入用户名
  2. 使用id定位,输入密码
  3. 3秒后关闭浏览器窗口

案例解析:

  1. # 导包
  2. from selenium import webdriver
  3. from time import sleep
  4. # 获取浏览器对象
  5. driver = webdriver.Chrome()
  6. # 打开URL
  7. # 注意:\反斜杠在python中是转义字符 r:修饰的字符串,如果字符串中有转义字符,不进行转义使用
  8. url = 'http://confluence.huisaas.com/'
  9. driver.get(url)
  10. # 查找用户名元素
  11. username = driver.find_element_by_id('os_username')
  12. # 查找密码元素
  13. password = driver.find_element_by_id('os_password')
  14. # 用户名输入
  15. username.send_keys('admin')
  16. # 密码输入
  17. password.send_keys('123456')
  18. # 暂停3秒
  19. sleep(3)
  20. # 退出浏览器驱动
  21. driver.quit()

3.2 name定位

说明:name定位就是根据元素name属性来定位。HTML文档中name的属性值是可以重复的

前提:元素有name属性

name定位方法

  1. element = driver.find_element_by_name(name)

3.3 class_name定位

说明:class_name定位就是根据元素class属性值来定位元素。HTML通过使用class来定义元素的样式

前提:元素有class属性

注意:如果class有多个属性值,只能使用其中一个

class_name定位方法

  1. element = driver.find_element_by_class_name(class_name)

3.4 tag_name定位

说明:tag_name定位就是通过标签名来定位

HTML本职就是由不同的tag组成,每一种标签一般在页面中会存在多个,所以不方便进行精准定位,一般很少使用

tag_name定位方法

  1. element = driver.find_element_by_tag_name(tag_name)
  2. # 如果存在多个相同标签,则返回符合条件的第一个标签

案列

需求:打开一个注册页 ,完成以下操作

  1. 使用tag_name定位,输入用户名

注意:页面中如果存在多个相同的标签名,默认返回第一个标签

案列解析

  1. from selenium import webdriver
  2. from time import sleep
  3. # 获取浏览器对象
  4. driver = webdriver.Chrome()
  5. # 打开URL
  6. url = 'http://confluence.huisaas.com/'
  7. driver.get(url)
  8. # 查找用户名元素,输入用户名
  9. driver.find_element_by_tag_name('imput').send_keys('admin')
  10. # 暂停3秒
  11. sleep(3)
  12. # 退出浏览器驱动
  13. driver.quit()

3.5 link_text定位

说明:link_text定位是专门用来定位超链接元素(标签< /a>),并且是通过超链接的文本内容来定位元素

link_text定位方法

  1. element = driver.find_element_by_link_text(link_text)
  2. # link_text:为超链接的全部文本内容

注意

  1. 只能使用精准匹配(a标签的全部文本内容)

3.6 partial_link_text定位

说明:partial_link_text定位是对link_text定位的补充,link_text使用全部文本内容匹配元素,

而partial_link_text可以使用局部来匹配元素,也可以使用全部文本内容匹配元素

partial_link_text定位方法

  1. element = driver.find_element_by_partial_link_text(partial_link_text)
  2. # partial_link_text:可以传入a标签局部文本-能表达唯一性

注意

  1. 可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的关键词
  2. 如果有多个值,默认返回第一个值

3.7xpath 和 css 定位

为什么使用 xpath 和 css 定位?

  1. id 、name、class:依赖于元素对应的属性,如果元素没有以上三个属性,定位方法不能使用
  2. link_text,partial_link_text:只适合超链接
  3. tag_name :只能找页面唯一元素,或者页面中多个相同元素中的第一个元素
1.什么是 xpath 定位?

说明:基于元素的路径

  1. xpath即为XML path的简称,它是一门在XML文档中查找信息的语言
  2. HTML可以看做是XML的一种实现,所以selenium用户可以使用这种强大的语言在web应用中定位元素

XML:一种标记语言,用于数据的存储和传递,后缀.xml结尾

xpath 定位策略

  1. 路径-定位
  2. 利用元素属性-定位
  3. 属性与逻辑结合-定位
  4. 层级与属性结合-定位

xpath 定位方法

  1. element = driver.find_element_by_xpath(xpath)

路径定位(绝对路径、相对路径)

绝对路径:从最外层元素到指定元素之间所有经过元素层级的路径

  1. 绝对路径以/html根节点开始,使用/来分隔元素层级

    如:/html/body/div/fieldset/p[1]/input

  2. 绝对路径对页面结构要求比较严格,不建议使用

相对路径:匹配任意层级的元素,不限制元素的位置

  1. 相对路径以//开始,双斜杠后边跟元素名称,不值元素名称可以使用*代替
  2. 格式://input 或者 //*

路径结合属性

语法:在xpath中,所有的属性必须使用@符号修饰 如://*[@id='id值']

路径结合逻辑(多个属性)

语法://[@id=“id值” and @属性=‘属性值’]

路径结合层级

语法://*[@id='父级id属性值']/input

注意:

  1. 一般使用指定标签名称,不使用*代替,效率比较慢
  2. 无论是绝对路径和相对路径,/后面必须为元素的名称或者*

XPath - 延伸

//*[text() = "xxx"] 文本内容是XXX的元素

提示:一般适合 p标签, a标签

//*[contains(@attribute, 'xxx')] 属性中含有XXX的元素

提示:contains为关键字,不可更改

//*[starts-with(@attribute,'xxx)] 属性以xxx开头的元素

3.8 CSS定位

1.什么是CSS定位
  1. CSS是一种语言,它用来描述HTML元素的显示样式
  2. 在CSS中,选择器是一种模式,用于选择需要添加样式的元素
  3. 在Selenium中也可以使用这种选择器来定位元素

提示:

  1. 1. selenium中推荐使用CSS定位,因为它比Xpath定位速度快
  2. 2. CSS选择器语法非常强大,在这里离我们只学习测试中常用的几个
2. CSS定位方法

element = driver.find_element_by_css_selector(css_selector)

3. CSS定位常用策略(方式)
  1. id选择器
  2. class选择器
  3. 元素选择器
  4. 属性选择器
  5. 层级选择器

id选择器

说明:根据元素id属性来选择

格式:#id

例如:#userA<选择id属性值为userA的元素>

class选择器

说明:根据元素class属性来选择

格式:.class

例如:.userA<选择class属性值为userA的所有元素>

元素选择器

语法:element 如:input

属性选择器

语法:[属性名 = 属性值]

层级选择器

语法:

  1. 1. p >input
  2. 2. p input

提示:>与空格的区别,大于号必须为子元素,空格则不用

4. CSS延伸[了解]

input[type^='p'] type属性以p字母开头的元素

input[type$='d'] type属性以d字母结束的元素

input[type*='w'] type属性包含w字母的元素

3.9 定位一组元素

方法:driver.find.elements_by_xxx()

返回结果:类型为列表,要对列表进行访问和操作必须指定下标或进行遍历,[下标从0开始]

3.10 扩展8种元素定位的底层实现

方式:driver.find_element(By.xxx, 'value')

参数说明:

​ By.xxx :为By类的类型 如By.ID

​ value :元素的定位值 如:“userA”

By类:需要导包 位置:from selenium.webdriver.common.by import By

二、元素操作

1.操作浏览器常用方法

  1. maximize_window() 最大化浏览器窗口 --> 模拟浏览器最大化按钮
  2. set_window_size(width, height) 设置浏览器窗口大小 --> 设置浏览器宽、高(像素点)
  3. set_window_position(x,y) 设置浏览器窗口位置 --> 设置浏览器位置
  4. back() 后退 --> 模拟浏览器后退按钮
  5. forward() 前进--> 模拟浏览器前进按钮
  6. refresh() 刷新--> 模拟浏览器 F5 刷新
  7. close() 关闭当前窗口 --> 模拟点击浏览器关闭按钮
  8. quit() 关闭浏览器驱动对象 --> 关闭所有程序启动的窗口
  9. title 获取页面title
  10. current_url 获取当前页面URL

2. 获取元素信息的常用方法

  1. size 返回元素大小
  2. text 获取元素的文本
  3. get_attribute("xxx") 获取属性值,传递的参数为元素的属性名
  4. is_displayedd() 判断元素是否可见
  5. is_enabled() 判断元素是否可用
  6. is_selected() 判断元素是否选中,用来检查复选框或单选按钮是否被选中

提示:

  1. 1. size text 为属性,调用时无括号:如:xxx.size

三、鼠标和键盘操作

1. 鼠标操作的方法

说明:在selenium中将操作鼠标的方法封装在 ActionChains 类中

导包:from selenium.webdriver import ActionChains

实例化对象:

​ action = ActionChains(driver)

方法:

  1. 1. context_click(element) 右击 --> 模拟鼠标右键点击效果
  2. 2. double_click(element) 双击 --> 模拟鼠标双击效果
  3. 3. drag_and_drop(source, target) 拖动 --> 模拟鼠标拖动效果
  4. 4. move_to_element(element) 悬停 --> 模拟鼠标悬停效果
  5. 5. perform() 执行 --> 此方法用来执行以上所有鼠标操作

2. 键盘操作

说明:

  1. 1. 模拟键盘上一些按键或组合键的输入 如:ctrl + c
  2. 2. Selenium中把键盘的按键都封装在keys类中

导包:from selenium.webdriver.common.keys import keys

方法:

  1. 1. send_keys(Keys.BACK_SPACE) 删除键(BackSpace
  2. 2. send_keys(Keys.SPACE) 空格键(Space
  3. 3. send_keys(Keys.TAB) 制表符(Tab)
  4. 4. send_keys(Keys.ESCAPE) 回退键(Esc)
  5. 5. send_keys(Keys.ENTER) 回车键(Enter)
  6. 6. send_keys(Keys.CONTROL, 'a') Ctrl+A
  7. 7.send_keys(Keys.CONTROL, 'c') Ctrl+C

UI自动化学习笔记- Selenium元素定位及元素操作的更多相关文章

  1. UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)

    一.元素等待 1. 元素等待 1.1 什么是元素等待 概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程 意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现 ...

  2. UI自动化学习笔记- Selenium一些特殊操作的处理

    一.特殊操作处理 1. 下拉选择框操作 1.1 如何操作下拉选择框 实现方式一 思路:先定位到要操作的option元素,然后执行点击操作 driver.find_element_by_css_sele ...

  3. UI自动化学习笔记- PO模型介绍和使用

    一.PO模型 1.PO介绍:page(页面) object(对象) 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同),通常PO 模型可 ...

  4. UI自动化学习笔记- UnitTest单元测试框架详解

    一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...

  5. UI自动化学习笔记- 日志相关操作

    一.日志相关 1.日志 概念:日志就是用于记录系统运行时的信息,对一个事件的记录,也称log 1.1 日志的作用 调试程序 了解系统程序运行的情况,是否正常 系统程序运行故障分析与问题定位 用来做用户 ...

  6. Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」

    1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...

  7. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  8. selenium webdriver学习(四)------------定位页面元素(转)

    selenium webdriver学习(四)------------定位页面元素 博客分类: Selenium-webdriver seleniumwebdriver定位页面元素findElemen ...

  9. python ui自动化之元素定位和常用操作

    做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 ...

随机推荐

  1. Ubuntu 16.04 Bridge配置

    Ubuntu 16.04 Bridge配置 一.安装网桥拓展包 bridge-utils root@ubuntu:~# apt-get install bridge-utils 二.创建网桥设备 // ...

  2. 010.Python字符串的格式化

    字符串的格式化 顺序传参 索引传参 关键字传参 容器类型传参(列表和元组) {}相当于占位符 1 顺序传参 strvar = "他{}牺牲自己,{}出卖组织" res = strv ...

  3. 使用nuget包下载Entity Framework6.0无法使用模型类与数据库上下文自动生成controller与view

    解决方法:卸载掉原有的6.0版本EF,从控制台安装5.0版本的. >工具>库程序包管理器>程序包管理器控制台.在PM>后面输入安装命令. 命令如下 Install-Packag ...

  4. Hadoop MapReduce 一文详解MapReduce及工作机制

    @ 目录 前言-MR概述 1.Hadoop MapReduce设计思想及优缺点 设计思想 优点: 缺点: 2. Hadoop MapReduce核心思想 3.MapReduce工作机制 剖析MapRe ...

  5. java IO教程《三》

    缓冲区流讲解(Buffered) 什么是缓冲区? 缓冲流,也叫高效流,是对4个基本的File流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流:BufferedInputStream,Buffe ...

  6. FreeBSD 13.0 正式版发布,已经可以下载

    请访问原文链接:https://sysin.org/article/freebsd-13/,查看最新版.原创作品,转载请保留出处. 根据 FreeBSD 13.0 官方发布计划,4 月 9 日 13. ...

  7. week-03

    1.简述HTTP交互原理 1.浏览器分析输入访问的地址 域名(IP)+$uri 2.读取浏览器缓存 3.请求DNS服务器,解析域名,返回IP 4.建立TCP连接,三次握手 5.发送请求 6.接收返回请 ...

  8. [leetcode] 35. 搜索插入位置(Java)(二分)

    35. 搜索插入位置 二分,太简单,没啥好说的 class Solution { public int searchInsert(int[] nums, int target) { if (nums. ...

  9. 在gin框架中使用JWT

    在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ...

  10. HiCar技术概述

    HiCar技术概述 HUAWEI HiCar(以下简称 HiCar)是华为提供的人-车-家全场景智慧互联(HUAWEI HiCar Smart Connection)解决方案,具备如下特点: 安全交互 ...