IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium元素定位 -> 正文阅读

[开发测试]selenium元素定位

定位一个元素
webdriver提供了八种元素定位的方法,在python中,对应的方法就是:

定位方式:

1.id定位

path = 'http://www.bing.com'
driver = webdriver.Chrome()
#打开页面
driver.get(path)
#id定位
driver.find_element_by_id('xxx')

2.name定位

#name定位
driver.find_element_by_name('xxx')

3.class定位

#class定位
driver.find_element_by_class_name('xxx')

4.tag定位

#tag定位
driver.find_element_by_tag_name('xxx')

5.link定位

#link定位
driver.find_element_by_link_text('xxx')

6.partial link定位(用于有时文本链接太长)

#partial link定位(用于有时文本链接太长)
driver.find_element_by_partial_link_text('xxx')

7.XPath定位

7.1绝对路径定位

driver.find_element_by_xpath('/html/body/header/div[2]/div/nav/ul/li[12]/a')

7.2利用元素属性定位

driver.find_element_by_xpath('//*[@id="subNavbar"]/ul/li[12]/a')

7.3层级和属性结合

7.4使用逻辑运算符

8.CSS定位

css是一种语言,用来描述HTML和XML文档的表现。css使用选择器来为页面元素绑定属性。这些选择器可以被selenium用作另外的定位策略。
css可以较为灵活地选择控件的任意属性,一般情况下定位速度比XPath快。

css选择器常见语法
在这里插入图片描述
1)通过class属性定位:

find_element_by_css_selector(".s_ipt")
find_element_by_css_selector(".bg s_btn")

find_element_by_css_selector()方法用于CSS语言定位元素,点号(.)表示通过class属性来定位元素。

2)通过id属性定位;

find_element_by_css_selector("#kw")
find_element_by_css_selector("#su")

3)井号(#)表示通过id属性来定位元素。通过标签名定位:
find_element_by_css_selector(“input”)

在CSS语言中,用标签名定位元素不需要任何符号标识,直接使用标签名即可。但我们前面已经了解到,标签名重复的概率非常大,所以通过这种方式很难找到想要的元素。

1)通过父子关系定位:

find_element_by_css_selector("span>input")

上面的写法表示有父亲元素,它的标签名为span,查找它的所有标签名叫input 的子元素。

2)通过属性定位:

find_element_by_css_selector("[autocompletc=off]")
find_element_by_css_selector("[name=kw]")
find_element_by_css_selector('[type="submit"])

在CSS当中也可以使用元素的任意属性,只要这些属性可以唯一标识这个元素。对于属性值来说,可加引号,也可以不加,但注意和整个字符串的引号进行区分。

3)组合定位:
我们可以把上面的定位策略组合起来使用,这就大大加强了定位元素的唯一性。

find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")
find_element_by_css_selector("span.bg s_btn_wr>input#su")

有一个父元素,它的标签名叫 span;它有一个class 属性值叫 bg s_ipt_wr:它有一个子元素,标签名叫input,并且这个子元素的class属性值叫s_ipt。我们要找的就是具有这么多特征的一个子元素。

9.用By定位元素(便于封装,通常是用这个)


find_element(By.ID, "kw"")
find_element(By.NAME, "wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,"新闻")
find_element(By.PARTIAL_LINK_TEXT,"新")
find_element(By.XPATH,"//*[@class="bg s_btn']"")

10.定位一组 元素

定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单次element后面多加一个s表示复数

定位一组元素适用场景:
1.批量操作元素,例如勾选页面上所有的复选框。
2.先获取一组元素,再从这组对象中过滤出需要操作的元素。

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>checkbox</title>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js"></script>
</head>

<body>
<h3>checkbox</h3>
<div class="well">
<form class="form-horizontal">

<div class= " control-group">
<label class="control-label" for="c1">checkbox1</label><div class="controls "><input type="checkbox" id="c1"/></div>
</div>

<div class="control-group">
<label class="control-label" for="c2 ">checkbox2</label><div class=" controls"><input type="checkbox" id="c2"/></div>
</div>

<div class="control-group">
<label class="control-label" for="c3">checkbox3</label><div class=" controls"><input type="checkbox" id="c3"/></div>
</div>

</form>
</div>
</body></html>

例子:
勾选上述网页的复选框

通过tag_name的定位方法很难定位到单个元素,因为元素标签重名的概率很高。
所以在定位一组元素时,这种方式就可以用到了。

下面的例子先通过find_elements_by_tag_name()找到一组标签名为input的元素,
然后通过for循环进行遍历,在遍历的过程中,通过get_attribute()方法获取元素的type属性是否为“CheckBox”,如果是,就对其进行勾选操作

from selenium import webdriver
import os,time

#打开本地文件
driver=webdriver.Chrome()
url=r'C:\Users\86467\Desktop\checkbox.html'
driver.get(url)

#获取所有标签为input的标签
inputs=driver.find_elements_by_tag_name('input')
for i in inputs:

    #匹配类型为复选框的标签
    if i.get_attribute('type')=='checkbox':
        #进行勾选
        i.click()
        time.sleep(2)

除此之外,还可以用XPath或CSS来直接判断属性值。
通过XPath或CSS来查找一组元素时,省去了判断步骤。

#!/usr/bin/env python 
# -*- coding:utf-8 -*-

from selenium import webdriver
import os,time

#打开本地文件
driver=webdriver.Chrome()
url=r'C:\Users\86467\Desktop\checkbox.html'
driver.get(url)

#通过xpath找到type=checkbox的元素
inputs=driver.find_elements_by_xpath("//input[@type='checkbox']")
for i in inputs:
    i.click()
    time.sleep(2)
#
inpu=driver.find_elements_by_css_selector('input[type=checkbox]')
for i in inpu:
    i.click()
    time.sleep(2)

#计算元素的个数
print(len(inpu))

#pop()默认获取列表的最后一个元素,带参数则默认获取对应参数的元素
inpu.pop().click()
inputs.pop(0).click()
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:12:52  更:2022-01-24 11:14:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:31:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码