selenium study

image-20210830170518271

启动浏览器的完整过程

启动

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/') 

设置浏览器大小

driver.maximize_window()  #将浏览器最大化显示
#driver.set_window_size(480, 800)  #参数数字为像素点

点击页面

#selenium 元素查找find_element_by_id方法,找到元素后进行点击
driver.find_element_by_id('su').click()

填写表单

找到文本字段的<input>或<textarea>元素,然后调用send_keys()

elem=driver.find_element_by_id('kw')#输入框标识
elem.send_keys('selenium') #输入内容
elem.submit()# 提交

发送特殊键

# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)# 输入空格键+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')# ctrl+v 粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')# 通过回车键来代替单击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)send_keys(Keys.TAB) # 制表键(Tab)
send_keys(Keys.ESCAPE) # 回退键(Esc)
send_keys(Keys.F1) # 键盘 F1
send_keys(Keys.F12) # 键盘 F12

点击浏览器按钮

driver.back()点击“返回”按钮。
driver.forward()点击“前进”按钮。
driver.refresh()点击“刷新”按钮。
driver.quit()点击“关闭窗口”按钮。

close() 关闭单个窗口
quit() 关闭所有窗口

寻找元素/对象定位

对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。

定位对象的目的一般有下面几种

· 操作对象

· 获得对象的属性,如获得测试对象的class属性,name属性等等

· 获得对象的text

· 获得对象的数量

webdriver提供了一系列的对象定位方法,常用的有以下几种

  • · id

  • · name

  • · class name

  • · link text

  • · partial link text

  • · tag name

  • · xpath

  • · css selector

#coding=utf-8from selenium import webdriverimport timebrowser = webdriver.Firefox()browser.get("http://www.baidu.com")
time.sleep(2)
#########百度输入框的定位方式##########
#通过id方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过name方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通过tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")
#通过class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通过CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通过xphan方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
############################################
browser.quit()

find_element_ by_tag_name()返回一个WebElement对象

find_elements_ 返回WebElement_对象的列表,包含所有匹配元素

find_element(By.TAG_NAME, “input”)

#selenium 元素查找find_element_by_id方法,找到元素后输入信息
driver.find_element_by_id('kw').send_keys('selenium') #find_element(By.," ")
driver.find_element(By.ID, "kw")
driver.find_elements(By.TAG_NAME, "input")driver.quit()#退出
  • _by_tag_name()区分大小写,如无匹配元素,就抛出NoSuchElement异常,需添加try和except语句。

    from selenium import webdriver
    driver = webdriver.Chrome()driver.get('https://www.baidu.com/')
    try:elem=driver.find_element_by_class_name('kw')print('Found <%s> element with that class name.'%\(elem.tag.name))
    except:print('Was not able to find an element with that name.')

id

id 和 name 是我们最最常用的定位方式,因为大多数控件都有这两个属性

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

username=driver.find_element_by_id("id_username")
password=driver.find_element_by_id("id_password")
#用户名输入admin,密码输入123241234
username.send_keys("admin")
password.send_keys("123241234")

通过前端工具,找到了百度输入框的属性信息,如下:

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

通过find_element_by_id(“kw”) 函数就是捕获到百度输入框

name

标签中要有name属性,而且name唯一,优先级低于id. 如果界面有多个name属性,那么,默认选择第一个

通过find_element_by_name(“wd”)函数同样也可以捕获百度输入框

driver.find_element(By.ID, "kw")
driver.find_elements(By.NAME, "wd")

**tag name **

input 就是一个标签的名字,可以通过find_element_by_tag_name(“input”) 函数来定位。

tag_name是通过标签名称来定位的,如<a>:a标签。

tag name有很多重复的,造成了选择tag name来定位页面元素不准确,所以使用这个方法定位web元素的机会很少。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWPpU5aq-1677229123326)(C:\Users\00308559\AppData\Roaming\Typora\typora-user-images\image-20210831145931634.png)]

发现上面有很多input的选项。所以我们扩大节点的参照选择,我们选择上面这个form来作为我们tag name。


try:driver.find_element_by_tag_name("form")print ('test pass: tag name found')
except Exception as e:print ("Exception found", format(e))driver.quit()

使用这个方法定位元素的机会比较少

class name

class=“s_ipt”

通过find_element_by_class_name(“s_ipt”)函数捕获百度输入框。

<span id="s_kw_wrap" class="bg s_ipt_wr quickdelete-wrap"></span>

class 属性表示一类的样式,应用在多个元素上,那么唯一性就要注意了。

看下面这个 span 元素,其中class=“bg s_ipt_wr quickdelete-wrap”,空格在这里的作用是分割多个类名的。这个 class 属性有两个空格,那么的代表这个 class 属性中包含了 3 个类名。

使用 WebDriver 中的 class_name 定位方式的话,就只能使用其中一个。

driver.find_element_by_class_name("bg") ✅driver.find_element_by_class_name("bg s_ipt_wr quickdelete-wrap")

对 class_name 的唯一性验证,同样在 console 中借助 JavaScript 代码:

document.getElementsByClassName("bg")

driver.find_element_by_class_name(“classname”)

很多并列的元素如list表单,class都是共用同一个

**driver.find_element_by_class_name(“classname”)**就可以派上用场了,该方法可以返回的是一个list列表,那么所有针对list的方法在它上面都同样适用。比如,如果我们知道想要定位的元素在页面中是第n个,则可以这样定位:

driver.find_elements_by_class_name(“classname”)[n] (注意:是elements,不是element)

CSS定位

CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML和XML文档的表现。CSS使用选择器来为页面元素绑定属性。

find_element_by_css_selector(“#kw”)

通过find_element_by_css_selector( )函数,选择取百度输入框的id属性来定义

也可以取name属性

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
driver.find_element_by_css_selector("a[name=\"tj_news\"]").click()

可以取title属性

<a onclick="queryTab(this);" mon="col=502&pn=0" title="web" href="http://www.baidu.com/">网页</a>
driver.find_element_by_css_selector("a[title=\"web\"]").click()

也可以是取…:

<a class="RecycleBin xz" href="javascript:void(0);">
driver.find_element_by_css_selector("a.RecycleBin").click()

单一属性定位

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

定位输入框

1:type selector

driver.find_element_by_css_selector(‘input’)

2:id 定位

driver.find_element_by_css_selector**(‘#kw’)**

3:class 定位

driver.find_element_by_css_selector('.s_ipt’)

4:其他属性定位

driver.find_element_by_css_selector('[name=‘wd’]')

driver.find_element_by_css_selector(“[type=‘text’]”)

组合属性定位

1:id组合属性定位

driver.find_element_by_css_selector("input#kw")

2:class组合属性定位

driver.find_element_by_css_selector(“input.s_ipt”)

3:其他属性组合定位

driver.find_element_by_css_selector(“input[name=‘wd’]”)

4:仅有属性名,没有值也可以

driver.find_element_by_css_selector(“input[name]”)

5:两个其他属性组合定位

driver.find_element_by_css_selector(“[name=‘wd’][autocomplete=‘off’]”)

模糊匹配属性值

1>属性值由多个空格隔开,匹配其中一个值的方法

driver.find_element_by_css_selector(“input[class~=‘btn’]”)

2>匹配属性值为字符串开头的方法

driver.find_element_by_css_selector(“input[class^=‘btn’]”)

3>匹配属性值字符串结尾的方法

driver.find_element_by_css_selector(“input[class$=‘s_btn’]”)

4>匹配被-分割的属性值的方法,如上图的class

driver.find_element_by_css_selector(“input[class|=‘s’]”) #要求精确填写的属性值

XPath

XPath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,所以selenium用户可是使用这种强大语言在web应用中定位元素。

XPath术语

节点Node

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book><title lang="en">Harry Potter</title><author>J K. Rowling</author> <year>2005</year><price>29.99</price>
</book></bookstore>
<bookstore> (文档节点)
<author>J K. Rowling</author> (元素节点)
lang="en" (属性节点)

基本值(Atomic value):无父或无子的节点

J K. Rowling
"en"

项目(Item):基本值或节点

节点关系

父(parent):每个元素及属性都有一个父

在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:

<book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book>

**子(Children)

selenium_study相关推荐

  1. python中一共有多少个关键字-Python中所有的关键字

    在python中若想查询python中有哪些关键字可以先导入keyword模块 import keyword #导入关键字模块 print(keyword.kwlist) #查询所有关键字 查询结果: ...

最新文章

  1. 【云计算】_8云视频与通信服务(完结)
  2. 社交网络+大数据真的用来可以模拟一个活人吗?
  3. 4、java中的流程控制(程序结构)
  4. [react] React中在哪捕获错误?
  5. 你还在用 Date?建议使用 LocalDateTime 了!
  6. Tomcat学习总结(10)——Tomcat多实例冗余部署
  7. MAC . IntelliJ IDEA maven库下载依赖包速度慢的问题
  8. Android 11.0 12.0拨打接听电话默认开启免提
  9. protues7 使用笔记
  10. trainNetwork - Matlab官网介绍的中文版
  11. 【推荐】超级好用的打印插件Lodop使用笔记 动态赋值 打印模板解决方案
  12. 改进YOLOv5系列:首发结合 RepLKNet 构建 最新 RepLKDeXt 结构|CVPR2022 超大卷积核, 越大越暴力,大到31x31, 涨点高效
  13. 天行健,君子以自强不息
  14. Vue中的 Filters 过滤器
  15. 速腾聚创 RoboSense RS-Helios 32线激光雷达使用 LeGO-LOAM 算法建图
  16. 远程电脑不能复制粘贴
  17. 11111122266666
  18. 「人物特写」清华大学邓志东:“特征提取+推理”的小数据学习才是AI崛起的关键...
  19. 5-9 打印倒直角三角形图案
  20. Unity+C#开发笔记(六)| unity中单例模式的使用 | ╭(●`∀´●)╯╰(●’◡’●)╮

热门文章

  1. 2021 年元旦福利,小伙伴们来领现金红包
  2. Flink进阶系列--FLIP-27新的Source架构
  3. python爬虫——提取抓取内容(4)bs4基本用法
  4. 完善细节,使你的网站清新脱俗!
  5. leaflet之轨迹回放(一 Leaflet.MovingMarker)
  6. centos7下部署gitlab
  7. win7 远程协助mstsc灰色,“允许远程协助连接这台计算机”无法勾选
  8. 武大定量遥感课程学习笔记
  9. HackerRank python练习——Chocolate Feast
  10. C语言杂记 0x08