如果你还想从头学起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种元素定位方式的详细解读的更多相关文章

  1. 【python+selenium的web自动化】- 8种元素定位方式详解

    ​ 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. ​ 说明:以下操作统 ...

  2. Appium常用的3种元素定位方式

    以最右App为例 .apk文件网盘地址: 链接:https://pan.baidu.com/s/1L4MYkhpb5ECe8XeaneTx_Q 提取码:0jqm 1.find_element_by_i ...

  3. Selenium-几种元素定位方式

    #识别元素并操作#一般有如下几种方法,其中id最为常用.这里需要注意识别元素一定要用唯一id 1.find_element_by_id("value") #! /usr/bin/e ...

  4. Selenium系列(二) - 控制浏览器操作的详细解读

    如果你还不想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识 ...

  5. Selenium系列(四) - 鼠标、键盘操作详细解读

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  6. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  7. 关于selenium的8种元素定位

    selenium中有八种元素定位,分别是:id,name,class_name,tag_name,link_text.partial_link_text.xpath.css 简单的定位可以用 id.n ...

  8. Java + Selenium + WebDriver八大元素定位方式

    UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...

  9. Selenium:八种元素定位方法

    前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...

随机推荐

  1. 将配置好的虚拟机文件导入VMware

    第一步:打开VMware Workstation Pro 第二步:  选择文件,图示: 第三步:点击打开,选择配置好的虚拟机文件目录 点击打开就ok了,图示

  2. 阿里云ECS 实例Centos7系统磁盘扩容

    需求:一台阿里云的数据盘磁盘空间不足,需要扩容,我这里只有一个主分区,ext4文件系统. 因为磁盘扩容场景不同,阿里云的文档比较全面一些,所以先奉上阿里云的文档,下面开始我的操作步骤: 1.登录控制台 ...

  3. git基本命令(二)

    忽略文件      git可以将用户指定的文件或者目录排除在版本之外,它会检查代码仓库目录下是否存在名为.gitignore文件,如果存在就会一行一行读取这个文件的内容,会将每一行指定的文件或目录排除 ...

  4. 用pyqt5简单实现Mqtt调试助手-初学python

    最近在学习pyqt5,因为我们是做远程物联网设备的,所以就做个mqtt调试助手来练手.第一次做这种程序,没有加异常处理,会有很多不足,欢迎留言拍砖,直接上代码了 这个是程序入口, # 使用前先安装py ...

  5. 事务Transaction

    目录 为什么写这系列的文章 事务概念 ACID 并发事务导致的问题 脏读(Dirty Read) 非重复读(Nonrepeatable Read) 幻读(Phantom Reads) 丢失修改(Los ...

  6. Python——8函数式编程①

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  7. jvm的运行参数

    1.我们为什么要对jvm做优化? 在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们可能将有下面的需求: 运行的应用“卡住了”,日志不输出,程序没有反应 服务器的CPU负 ...

  8. 机器学习基础——详解自然语言处理之tf-idf

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天的文章和大家聊聊文本分析当中的一个简单但又大名鼎鼎的算法--TF-idf.说起来这个算法是自然语言处理领域的重要算法,但是因为它太有名了 ...

  9. C# 客户端内存优化分析

    背景概述 C# 开发客户端系统的时候,.net 框架本身就比较消耗内存资源,特别是xp 这种老爷机内存配置不是很高的电脑上运行,所以就需要进行内存上的优化,才能流畅的在哪些低端电脑上运行. 想要对C# ...

  10. MySQL占用CPU超过百分之100解决过程

    本文转载自: https://www.93bok.com 访问网页504 Gateway Time-out,登陆服务器查看,内存正常,CPU使用率达到了400%,因为是4核,所以到了400%,几乎全部 ...