2.元素定位

# 导包
from time import sleep
from selenium import webdriver

# 获取浏览器驱动
driver = webdriver.Chrome()

# 打开url
driver.get('https://baidu.com')

# 暂停 3 秒
sleep(3)

# 关闭浏览器驱动
driver.quit()

selenium提供了 8 种元素定位方式

  1. id name class_name(使用元素的class属性定位)——元素属性定位
  2. tag_name
  3. link_text 定位a标签(超链接)
  4. partial_link_text 定位a标签(超链接)模糊
  5. XPath 基于元素路径
  6. CSS 元素选择器

总结:
1基于元素属性特有定位方式——id name class_name
基于元素标签名称定位——tag_name
定位超文本链接——link_text 、partial_link_text
基于元素路径定位——xpath
基于选择器 ——CSS

id 定位

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

element = driver.find_element_by_id(id)

练习:

# id 定位练习
# 导包
from selenium import webdriver
from  time  import  sleep
# 获取浏览器对象

driver = webdriver.Chrome()
# 打开本地页面  url

# \  在python中是转义字符,前面加个 r
# r 如果字符中又转义字符,不转义
url = r"D:\桌面\摆烂DDD\测试\3.UI自动化\8天web自动化全套测试—资料\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)

# 使用双反斜杠 进行转义操作
# url = "E:\\课堂\\北京\\北京十期\\Day01\\02_其他资料\\浏览器\\课堂素材\\注册A.html"

# 使用本地浏览模式 前缀必须添加 file:///
# url = "file:///E:/课堂/北京/北京十期/Day01/02_其他资料/浏览器/课堂素材/注册A.html"

# 查找 用户名

username = driver.find_element_by_id("userA")
# 查找密码元素
password = driver.find_element_by_id("password")
# 用户输入admin
username.send_keys("admin")
# 输入密码 123456
password.send_keys("123456")
# 暂停3s
sleep(3)
#
# 退出浏览器驱动
driver.quit()

name定位

这个可以重复
前提:元素要有 name 属性

# 导包
from selenium import webdriver
from time import sleep


# 获取浏览器对象
driver = webdriver.Firefox()
# 打开url
url = r"E:xxx"
driver.get(url)

# 查找用户名 输入admin
driver.find_element_by_name("userA").send_keys("admin")
# 查找密码 输入123456
driver.find_element_by_name("passwordA").send_keys("123456")

# 暂停3秒
sleep(3)
# 关闭浏览器
driver.quit()

class_name 定位

# 导包
from selenium import webdriver
from time import sleep


# 获取浏览器对象
driver = webdriver.Firefox()
# 打开url
url = r"xxx"
driver.get(url)

# 查找电话 输入 18611111111
driver.find_element_by_class_name("telA").send_keys("18611111111")


# 暂停3秒
sleep(3)
# 关闭浏览器
driver.quit()

tag_name 定位

标签:尖括号后面那个元素

"""
    需求:
        1. 使用tag_name定位方式,使用注册A.html页面,用户名输入admin
    方法:
        1. driver.find_element_by_tag_name("") # 定位元素方法
        2. send_keys() # 输入方法
        3. driver.quit() # 退出方法
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"xxx"
driver.get(url)

# 使用tag_name定位用户名 并 输入admin
# 注意:页面中如果存在多个相同的标签名,默认返回第一个标签
driver.find_element_by_tag_name("input").send_keys("admin")

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

link_text(全部匹配) 和partial_link_text(模糊匹配)

只使用于——超链接

# link_text 定位

driver.find_element_by_link_text("xxx").click()


# partical_link_text  部分定位——唯一代表词,默认操作符合条件的第一个元素
driver.find_element_by_partical_link_text("xxx").onclick

xpath——基于路径

x——xml:一种标记语言,用于数据的存储和传递,

定位策略

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

定位方法

element = driver.find_element_by_xpath(xpath)

绝对路径:以 / 单斜杠开头
逐级编写,不能跳级
在这里插入图片描述

相对路径:只有开头的时候使用双斜杠 //

以双杠开头,双斜杠后面跟元素名称,不知元素名称可以使用 * 代替
// input
// *

用到属性值必须要加 @
在这里插入图片描述
这个所有标签属性都一样
在这里插入图片描述
尽量使用相对路径
在这里插入图片描述

"""
    需求:
        1. 使用绝对路径定位 用户名 输入 admin
        2. 暂停2秒钟
        3. 使用相对路径定位 密码框 输入 123

    方法:
        driver.find_element_by_xpath()
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"xxx"
driver.get(url)

# 使用绝对路径定位 用户名 admin

# driver.find_element_by_xpath("/html/body/form/div/fieldset/p[1]/input").send_keys("admin")

# 使用层级结合属性 定位用户名:
# 快捷键: driver.xpath
driver.find_element_by_xpath("//p[@id='p1']/input").send_keys("admin")

# 暂停2秒
sleep(2)

# 使用相对路径 定位 密码  123
# driver.find_element_by_xpath("//input[@id='passwordA']").send_keys("123")


# 使用逻辑结合
driver.find_element_by_xpath("//input[@id='passwordA' and @placeholder='密码A']").send_keys("123")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

starts_with: 以什么开头的,书写的时候不能跳字符
在这里插入图片描述

CSS 定位

用于选择需要添加 样式的元素

element = driver.find_element_by_css_selector(css_selector)

定位策略

  1. id选择器——#id

  2. class 选择器—— .class

  3. 元素选择器——element,适合单独元素
    在这里插入图片描述

  4. 属性选择器
    这个特别灵活在这里插入图片描述5. 层级选择器

方法一:尖括号是直属关系,只能找下一级
在这里插入图片描述

方法二:这个空格,后面只要是他的下级就行,不管中间隔了多少
在这里插入图片描述
下面这两个是一样的效果在这里插入图片描述
在这里插入图片描述
总结,css策略
在这里插入图片描述
获取元素的方法:元素.text

"""
    需求:
        1. 使用css id选择器 定位用户名 输入admin
        2. 使用css 属性选择 定位密码框 输入123456
        3. 使用 css class 选择器 定位电话号码: 18611112222
        4. 使用css 元素选择器 定位span标签获取文本值
        5. 使用层级选择器 定位email 输入 123@qq.com

    方法:
        driver.find_element_by_css_selector()
        获取文本的方法 元素.text
"""

# 导包
from selenium import webdriver
from time import sleep

# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"xxx"
driver.get(url)

# 1. 使用css id选择器 定位用户名 输入admin
driver.find_element_by_css_selector("#userA").send_keys("admin")
# 2. 使用css 属性选择 定位密码框 输入123456
driver.find_element_by_css_selector("[name='passwordA']").send_keys("123456")
# 3. 使用 css class 选择器 定位电话号码: 18611112222
driver.find_element_by_css_selector(".telA").send_keys("18611112222")
# 4. 使用css 元素选择器 定位span标签获取文本值
span = driver.find_element_by_css_selector("span").text
print("获取的span标签文本值:", span)

# 5. 使用层级选择器 定位email 输入 123@qq.com
driver.find_element_by_css_selector("p>input[placeholder='电子邮箱A']").send_keys("123@qq.com")

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

css扩展

在这里插入图片描述
在这里插入图片描述

"""
    需求:
        1. 使用css id选择器 定位用户名 输入admin
        2. 使用css 属性选择 定位密码框 输入123456
        3. 使用 css class 选择器 定位电话号码: 18611112222
        4. 使用css 元素选择器 定位span标签获取文本值
        5. 使用层级选择器 定位email 输入 123@qq.com

    方法:
        driver.find_element_by_css_selector()
        获取文本的方法 元素.text
"""

# 导包
from selenium import webdriver
from time import sleep

# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)

# 1. 使用css id选择器 定位用户名 输入admin 以指定字母开头 语法:[属性^='开头的字母']
driver.find_element_by_css_selector("[name^='us']").send_keys("admin")
# 2. 使用css 属性选择 定位密码框 输入123456 以指定字母结束 语法:[属性$='结束的字母']
driver.find_element_by_css_selector("[name$='dA']").send_keys("123456")
# 3. 使用 css class 选择器 定位电话号码: 18611112222 包含指定字母 语法:[属性*='包含字母']
driver.find_element_by_css_selector("[class*='el']").send_keys("18611112222")
# 4. 使用css 元素选择器 定位span标签获取文本值
span = driver.find_element_by_css_selector("span").text
print("获取的span标签文本值:", span)

# 5. 使用层级选择器 定位email 输入 123@qq.com
driver.find_element_by_css_selector("p>input[placeholder='电子邮箱A']").send_keys("123@qq.com")

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

在xpath 里面。属性要用@ 修饰

属性哪一行,text不是属性

css 和partical_ link_text 用的比较多
在这里插入图片描述
使用 driver.findelements_by xxx,返回的是一个列表,列表的访问,要么使用下标,要么使用遍历

"""
    目标:
        driver.find_elements_by_xxx
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"xxx"
driver.get(url)

# 获取所有的input元素
# elements = driver.find_elements_by_tag_name("input")

elements = driver.find_elements_by_id("userA")
print(len(elements))
print("elements的类型为:", type(elements))

# 输入内容,下标法
# elements[0].send_keys("admin")

# 通过遍历来输入
for el in elements:
    el.send_keys("admin")

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

find_element ——

"""
    目标:
        driver.find_element()

    需求:
        1. 使用driver.find_element()方法
        2. 输入用户名:admin
        3. 输入密码:123456
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()

# 打开 注册A.html
url = r"xxx"
driver.get(url)

# 使用find_element()定位用户名
# ctrl+alt+空格 获得包
driver.find_element(By.ID, "userA").send_keys("admin")
# 使用find_element()定位密码
driver.find_element(By.CSS_SELECTOR, "#passwordA").send_keys("123456")

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

在这里插入图片描述
By 需要导包
a
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值