八大元素定位及实例操作笔记

【VIP软件测试教程】Selenium自动化测试零基础入门宝典,白嫖不后悔!_哔哩哔哩_bilibili

久等了!150集Python自动化测试开发全栈付费教程!(软件测试入门+项目实战+简历优化)_哔哩哔哩_bilibili


元素定位:

所有的ui层的自动化都是基于元素定位实现的

所有的被操作的元素都是WebElement对象

元素 = HTML标签

基本格式:

<tagName attribute1="" attribute2>text</tagName>

<tagName attribute1="" attribute2 /tagName>

自动化,就是基于标签的属性来操作

八种元素定位:

id

driver.find_element_by_id()或者driver.find_element(By.ID, 'id')
namedriver.find_element(By.NAME, 'name')  
link_textdriver.find_element(By.LINK_TEXT,  'text')  主要用于超链接进行定位
partial_link_textlink_text的模糊查询,类似数据库的like %,查到多个元素选取第一个
tagname重复度最高,只有在需要定位后进行二次筛选的情况下使用
classname 基于元素样式进行定位,非常容易重复
css 应用较多,因为IE最初不支持xpath,完全基于class属性实现定位
xpath

目前应用最多,基于页面结构来进行定位

xpath    绝对路径:/html/body/div[4]/div/div/div/div[2]/div/div/div[1]/form/div[1]/input

                              较为麻烦,不推荐

            相对路径:基于匹配机制来查找元素,依照xpath语法结构来走

                             例: //*[@id="kw"]

                              // 表示从根路径下开始查找

                              * 任意元素

                              [] 表示筛选条件(查找函数)

                              @ 表示基于属性来筛选,例如id = "kw"表示基于id属性值为kw的条件来筛选

确认xpath路径是否正确:

  1. 在开发者工具elements页面使用ctrl+f查找,进行判断
  2. 在console中输入$x()进行校验

如果要基于text来确定元素,在[]中添加text()="文本内容"进行查找,例如://a[text()=’登录‘]

当你定位元素时,无法直接定位一个元素,可以通过定位子级元素然后返回父级元素,[]后加 /..

//input[contains(@id, 'kw')] ,contains表示进一步查找,匹配项模糊查找

上传文件时输入的是文件的路径

 

 实现Chrome浏览器网易云音乐页面的自动登录

"""
     网易云音乐的自动化登录
"""

# 导入WebDriver模块
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

# 导入强制等待
from time import sleep

# 创建chrome浏览器对象
driver = webdriver.Chrome()

# 访问指定的URL
driver.get('https://music.163.com/')
driver.maximize_window()  # 最大化窗口
sleep(2)  # 等待是为了让代码成功率更高

# 执行登录流程
driver.find_element(By.XPATH, '//*[@id="g-topbar"]/div/div/div/a').click()  # 登录
sleep(1)
driver.find_element(By.XPATH, '//*[@id="otherbtn"]/a').click()  # 选择其他登陆模式

driver.find_element(By.XPATH, '//*[@id="j-official-terms"]').send_keys(Keys.SPACE)  # 勾选协议

driver.find_element(By.LINK_TEXT, 'QQ登录').click()  # 选择QQ登录

# 句柄的处理
"""
    在计算机世界里,不同的标签页是通过不同的字符串来区分,可以理解为id
    在selenium操作的标签页中,在不切换的情况下,只会一直聚焦在第一个标签页
    如果要操作新的标签页就切换句柄
    原则:
        1.在selenium自动化时,尽可能保持有且最多有两个页面存在
        2.如果页面会自动关闭,就不需要额外执行close
        3.如果自动关闭后,仍需操作其他页面,需要切换句柄。
"""
handles = driver.window_handles  # 获取当前所有的句柄
print(handles)
driver.switch_to.window(handles[1])  # 切换到第二个句柄页
sleep(3)

"""
    iframe是一个窗体内嵌页面,本身是一个独立的html页面存在。本质上是个套娃。。。
    对于iframe内的元素如果要操作,是没有办法直接定位的
    遇到死活定位不到的元素,就检查下是不是一个iframe,如果是,切换iframe后再定位
    切换进去iframe后,无法操作iframe以外的内容,如果要操作原窗体内容,需要重新返回默认窗体
"""
# 切换iframe:有id直接传入id,没有id通过元素定位,传递元素进去
# frame1 = driver.find_element('id', 'ptlogin_iframe')
# driver.switch_to.frame(frame1)
driver.switch_to.frame('ptlogin_iframe')

# QQ快捷登录
driver.find_element(By.XPATH, '//*[@id="img_out_2040755107"]').click()
sleep(2)

# 返回默认窗体
driver.switch_to.default_content()

handles = driver.window_handles
print(handles)

# 切换回网易云主页句柄
driver.switch_to.window(handles[0])
print(driver.title)

# 结束进程
sleep(3)
driver.quit()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值