Selenium系列(一) - 8种元素定位方式的详细解读
如果你还想从头学起Selenium,可以看看这个系列的文章哦!
https://www.cnblogs.com/poloyy/category/1680176.html
其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...)
安装Selenium和下载Driver
安装selenium
- pip3 install selenium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
下载Driver
打开:http://npm.taobao.org/mirrors/chromedriver/
找到自己Chrome对应的版本下载即可
访问百度的小Demo
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- __title__ =
- __Time__ = 2020/3/25 17:00
- __Author__ = 小菠萝测试笔记
- __Blog__ = https://www.cnblogs.com/poloyy/
- """
- import time
- from selenium import webdriver
- # 加载浏览器驱动
- driver = webdriver.Chrome("../resources/chromedriver.exe")
- # 访问网址
- driver.get("http://www.baidu.com")
- # 找到搜索框
- inputElement = driver.find_element_by_id("kw")
- # 输入搜索内容
- inputElement.send_keys("小菠萝测试笔记")
- # 找到搜索按钮
- searchElement = driver.find_element_by_id("su")
- # 点击搜索按钮
- searchElement.click()
- time.sleep(5)
- # 释放资源, 退出浏览器
- driver.quit()
可以看到,流水账式写Web自动化测试代码的顺序就是:
加载驱动 - 访问链接 - 页面操作
首先,先将一个测试html保存到本地,后续案例就按照这个页面来演示啦!
代码如下:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>小菠萝测试笔记</title>
- </head>
- <body>
- <a>用户名:</a>
- <input id="username" class="username">
- <a>密码</a>
- <input id="password" name="password">
- <button class="login">登录</button>
- <br>
- <p>测试啦</p>
- <p>再一次测试啦</p>
- <br>
- <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
- class="mnav sp dot">终极抗击肺炎啊</a>
- <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-2020"
- class="mnav sp dot">抗击肺炎</a>
- <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
- class="mnav sp dot">抗击肺炎</a>
- <div>
- <ul>
- <li class="li">111</li>
- <li class="li">222</li>
- <li class="li">333</li>
- </ul>
- <ul>
- <li>aaa</li>
- <li>bbb</li>
- <li>ccc</li>
- </ul>
- </div>
- </body>
- </html>
辣么,我们接下来就说下有哪些元素定位的方式呢
方式一:通过元素的id
- # 找到id = username的元素
- username = driver.find_element_by_id("username")
- # 输入值 张三
- username.send_keys("张三")
- # 找到od = password的元素
- password = driver.find_element_by_id("password")
- # 输入值 123
- password.send_keys("")
知识点
在前端,一般一个id值是唯一的,只属于一个元素
方式二:通过元素的class
- # =====通过 元素Class查找(仅返回匹配到的第一个)
- login_btn = driver.find_element_by_class_name("login")
- # 点击
- login_btn.click()
知识点
- 在前端,一般多个元素共用一个class
- 但 find_element_by_class_name 只返回第一个匹配到class的元素
- 坏处:当找不到元素则报错
- 如果想返回所有匹配到class的元素,可看下面代码
- # =====找到所有class=li的元素
- lis = driver.find_elements_by_class_name("li")
- for i in lis:
- print(i.text)
执行结果
- 111
- 222
- 333
知识点
- 返回的是一个元素列表,若只匹配到一个也是列表
- 好处:当没有找到元素时不会报错,而是返回空列表 []
方式三:通过元素的name
- # =====通过 元素name查找元素(仅返回匹配到的第一个)
- password = driver.find_element_by_name("password")
- # =====输入值 123
- password.send_keys("")
知识点
- 和class一样,也有可能有多个元素共用一个name
- 但 find_element_by_name 只返回第一个匹配到name的元素
- 想返回多个的话,和class一样,需要调用 find_elements_by_name 方法,这里不再赘述,写法和上面一致(已标红)
方式四:通过元素标签
- # =====通过 元素标签(仅返回匹配到的第一个)=====
- p = driver.find_element_by_tag_name("p")
- # 打印元素的文本值
- print(p.text)
- print("===")
- # =====通过 元素标签(返回匹配到的所有元素)=====
- ps = driver.find_elements_by_tag_name("p")
- for p in ps:
- print(p.text)
执行结果
- 测试啦
===- 测试啦
- 再一次测试啦
知识点
- 多个元素同种HTML标签见怪不怪了
- 同样的, find_element_by_tag_name 返回第一个匹配到标签的元素
- find_elements_by_tag_name 可以返回所有匹配到标签的元素
方式五:通过超链接文本
- # =====通过 超链接的文本查找元素(仅支持精确匹配)
- atext = driver.find_element_by_link_text("抗击肺炎")
- print(atext.text)
- print("===")
- ass = driver.find_elements_by_link_text("抗击肺炎")
- for i in ass:
- print(i.text)
执行结果
- 抗击肺炎
===- 抗击肺炎
- 抗击肺炎
知识点
- find_element_by_link_text 是精确匹配,需要文本完全相同才能匹配
- 若需要返回全部匹配到的元素,也需要用 find_elements_by_link_text
方式六:通过超链接文本(模糊匹配)
- # =====通过 超链接的文本查找元素(支持模糊匹配)
- atext = driver.find_element_by_partial_link_text("肺炎")
- print(atext.text)
- print("===")
- ass = driver.find_elements_by_partial_link_text("肺炎")
- for i in ass:
- print(i.text)
执行结果
- 终极抗击肺炎啊
- ===
- 终极抗击肺炎啊
- 抗击肺炎
- 抗击肺炎
知识点
- find_element_by_partial_link_text 支持模糊匹配,包含文本则匹配成功
- 若需要返回全部匹配到的元素,也需要用 find_elements_by_partial_link_text
方式七:通过xpath(万能,重点)
- # ====通过 xpath
- lis = driver.find_element_by_xpath("/html/body/div/ul[2]/li[1]")
- print(lis.text)
执行结果
- aaa
注意: xpath 包含的知识点很多,暂时不在这篇幅展开讲,后续会单独补充详细博文哦!
方式八:通过css选择器(万能,重点)
- # ====通过css选择器
- lis = driver.find_element_by_css_selector("body > div > ul > li:nth-child(2)")
- print(lis.text)
执行结果
- 222
注意: css选择器 包含的知识点很多,暂时不在这篇幅展开讲,后续会单独补充详细博文哦!
Selenium系列(一) - 8种元素定位方式的详细解读的更多相关文章
- 【python+selenium的web自动化】- 8种元素定位方式详解
我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. 说明:以下操作统 ...
- Appium常用的3种元素定位方式
以最右App为例 .apk文件网盘地址: 链接:https://pan.baidu.com/s/1L4MYkhpb5ECe8XeaneTx_Q 提取码:0jqm 1.find_element_by_i ...
- Selenium-几种元素定位方式
#识别元素并操作#一般有如下几种方法,其中id最为常用.这里需要注意识别元素一定要用唯一id 1.find_element_by_id("value") #! /usr/bin/e ...
- Selenium系列(二) - 控制浏览器操作的详细解读
如果你还不想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识 ...
- Selenium系列(四) - 鼠标、键盘操作详细解读
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- selenium自动化测试——常见的八种元素定位方法
selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...
- 关于selenium的8种元素定位
selenium中有八种元素定位,分别是:id,name,class_name,tag_name,link_text.partial_link_text.xpath.css 简单的定位可以用 id.n ...
- Java + Selenium + WebDriver八大元素定位方式
UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...
- Selenium:八种元素定位方法
前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...
随机推荐
- python js正则表达式
一.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m 表示多行匹配JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达 ...
- 吴裕雄--天生自然KITTEN编程:一箭穿心
- Substring(Codeforces-D-拓扑排序)
D. Substring time limit per test 3 seconds memory limit per test 256 megabytes You are given a graph ...
- Qt类声明中Q_OBJECT的作用与报错解决
2017-06-22 周四 大雨 北京 院里 新建作图类,继承自QCUstomPlot类 因为需要同时作8张图,都要单坐标缩放的功能,因此想干脆新建一个类,继承自QCUstomPlot,把需要的功能都 ...
- Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解
题目链接 https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/ 题目内容 设计一个找到数据流中第K大元素的类(class) ...
- 对BFC的深层理解
BFC(Block Formatting Context)块级格式化上下文 注意:BFC首先是块,其次需要具备下面的条件之一才可以(通俗来说,BFC就好比一所985或者211的高校,想要成为985或者 ...
- Git私服搭建
Git私服搭建 一.Git服务器搭建方式 GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信? Git支持的四种通信协议: Local(本地协议) ...
- 前端基础知识之HTML
[1: What does a doctype do?] 1: doctype是html文件的第一行代码,意味着它的前面有注释都不行.所以要要写在<html>标签前面,而且它不属于html ...
- 使用CSS实现折叠面板总结
任务目的 深入理解html中radio的特性 深入理解CSS选择器以及伪元素的使用 任务描述 使用input的radio单选框特性结合CSS中的伪元素实现bootstrap中折叠面板(点击查看样例), ...
- redis系列之------过期策略
前言 我们都知道redis是常驻在内存当中的,因此他的效率比MySQL要快很多很多.但又引发了另外一个问题,内存从本质上讲,它是昂贵的,不能用于大量的长时间的存储,他是“不安全不稳定的“,并且有可能存 ...