web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天

这篇具有很好参考价值的文章主要介绍了web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.selenium获取断言信息

获取到的断言信息就是实际结果
预期结果使我们确定的,直接写在代码中的
而实际结果是无法确定的,所以需要用一些方法去获取

代码示例

"""
获取到的断言信息就是实际结果
预期结果使我们确定的,直接写在代码中的
而实际结果是无法确定的,所以需要用一些方法去获取
"""

from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
#这种写法是在配置了chromedriver环境变量之后,可不写chromedriver的路径
# driver=webdriver.Chrome()
# 访问网址
driver.get('http://www.baidu.com')
#获取页面的标题
print(driver.title)  #百度一下,你就知道
# 获取当前页面的 URL
print(driver.current_url)  #https://www.baidu.com/

# 获取标签对(html的标签对)之间的文本信息
#   1、标签元素如果不展示在页面上(比如:鼠标悬停才会有内容显示的情况),获取结果为空
#   2、如果标签对中间没有值,获取到的结果也是空的
#   3、如 input 之类的单标签,获取结果也是空的
print(driver.find_element_by_class_name("title-text").text)  #百度热榜
# 获取元素的某个属性
ele = driver.find_element_by_id("kw")
print(ele.get_attribute("class"))  #s_ipt
driver.quit()

2.设置元素等待

场景:当我们加载页面的时候,一些元素是需要时间的
就有可能发生,代码执行到了,而元素没有被加载出来
此时就会出现找不到元素的情况,所以就要元素等待

元素等待大家首先都会想到time.sleep(),但是这个效率低;比如你等待1s,程序在0.3s就已经加载完成了,那就是在浪费时间;已经知道了 为什么 time.sleep 不好,所以不用;

此问题的解决方案就是,在元素定位之前,进行等待,等到元素出现

所以webdriver 提供了两种等待类型:显示等待、隐式等待

2.1显示等待

  • 显示等待,若等到元素,就不会再等了
  • 若想使用显示等待,则必须对元素定位进行修改
  • 也就是说,显示等待必须对具体的某个元素定位,去主动声明

举例子,再微博地址为【https://m.weibo.cn/】做一些动作

(1)点击大家都在搜

web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天,ui自动化,python,selenium,自动化,selenium

(2)点击微博热搜榜

web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天,ui自动化,python,selenium,自动化,selenium

代码示例

from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("https://m.weibo.cn/")

# 点击大家都在搜
driver.find_element_by_xpath("/html/body/div/div/div/div/a//div").click()

# 点击微博热搜榜
ele=driver.find_element_by_css_selector("#app > div:nth-child(1) > div:nth-child(1) > div.card.m-panel.card16.m-col-2 > div > div > div:nth-child(10) > div > div > h4")
ele.click()

运行结果报错

web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天,ui自动化,python,selenium,自动化,selenium

那么我们来检验代码里的元素定位是否正确

web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天,ui自动化,python,selenium,自动化,selenium

web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天,ui自动化,python,selenium,自动化,selenium

原因(就是前文提到的):

当我们加载页面的时候,一些元素是需要时间的
就有可能发生,代码执行到了,而元素没有被加载出来
此时就会出现找不到元素的情况

利用显示等待,优化代码

from selenium import webdriver
from selenium.webdriver.common.by import By  # 设置元素定位使用哪种方法的
from selenium.webdriver.support.ui import WebDriverWait  # 元素等待类
from selenium.webdriver.support import expected_conditions as EC  # 提供条件判断函数
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("https://m.weibo.cn/")

# 点击大家都在搜
driver.find_element_by_xpath("/html/body/div/div/div/div/a//div").click()

# 点击微博热搜榜
# ele=driver.find_element_by_css_selector("#app > div:nth-child(1) > div:nth-child(1) > div.card.m-panel.card16.m-col-2 > div > div > div:nth-child(10) > div > div > h4")


# 显示等待,若等到元素,就不会再等了
# 若想使用显示等待,则必须对元素定位进行修改
# 也就是说,显示等待必须对具体的某个元素定位,去主动声明
# 每隔 0.5s 检查一次元素是否存在,最多等待 5 s
# 若在最大超时时间内,找到元素,就不等了,继续往下执行
# 若最大超时时间还找不到元素,就报错
ele = WebDriverWait(driver, 5, 0.5).until(  # 每隔 0.5s 检查一次元素是否存在,最多等待 5 s
    EC.visibility_of_element_located(  #visibility_of_element_located()是一个函数,并且()里的对象是元组,检查元素是否被加载出来
        (By.CSS_SELECTOR,
         "#app > div:nth-child(1) > div:nth-child(1) > div.card.m-panel.card16.m-col-2 > div > div > div:nth-child(10) > div > div > h4")
    )
)
ele.click()

运行结果(显示出微博热搜界面)

可给显示等待用一个函数封装起来,要用的时候直接调用即可

新建一个waitLib.py模块

from selenium.webdriver.support.ui import WebDriverWait  # 元素等待类
from selenium.webdriver.support import expected_conditions as EC  # 提供条件判断函数

# 将显示等待封装成了函数
def waitEle(driver, timeout, poll_frequency, findType, findStr):
    ele = WebDriverWait(driver, timeout, poll_frequency).until(
        EC.visibility_of_element_located(
            (findType, findStr)
        )
    )
    return ele

2.2隐式等待

为什么有显示等待,还有隐式等待,是因为显示等待的代码比较繁琐(复杂)

(显示等待对每一个元素都要声明,但是隐式等待只需要声明一次就可以)

隐式等待默认参数是
当脚本执行到某个元素定位的时候,能定位就继续执行
如果不能定位,以轮询的方式(0.5s 检查一次)不断的判断元素是否能被定位
假设,在第 x(x<=最大超时时间) 秒定位到元素了,就不等了,继续往下执行
若直到最大时长还没定位成功,就抛出异常

注意:声明隐式等待后,只有声明之后的元素定位才有隐式等待,声明之前的元素定位是没有隐式等待的

显示等待和隐式等待的功能是一样的,基本上用了显示等待就不要用隐式等待,用了隐式等待就不要用显示等待,显示等待的好处:比隐式等待更节约时间(根据自己的需求选择)

代码示例

from selenium import webdriver

# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")

# 隐式等待默认参数是秒,如下代码,最大超时时间为 5 秒
# 当脚本执行到某个元素定位的时候,能定位就继续执行
# 如果不能定位,以轮询的方式(0.5s 检查一次)不断的判断元素是否能被定位
# 假设,在第 x(x<=最大超时时间) 秒定位到元素了,就不等了,继续往下执行
# 若直到最大时长还没定位成功,就抛出异常

#声明隐式等待
driver.implicitly_wait(5) # 声明隐式等待后,只有声明之后的元素定位才有隐式等待,声明之前的元素定位是没有隐式等待的
# 访问网址
driver.get("https://m.weibo.cn/")
# 点击大家都在搜
driver.find_element_by_xpath("/html/body/div/div/div/div/a//div").click()
# 点击微博热搜榜
driver.find_element_by_css_selector("#app > div:nth-child(1) > div:nth-child(1) > div.card.m-panel.card16.m-col-2 > div > div > div:nth-child(10) > div > div > h4").click()

3.xpath高级语法

xpath 使用路径表达式来选取 xml 文档或者HTML文档上的节点或节点集
这些路径表达式和我们常规电脑上的文件路径表达式很像
xpath的最顶层是一个/
一层一层的写是绝对路径(用绝对路径写太繁琐)

相对路径是//

(/只能匹配到儿子,//能匹配到所有的后代)

用微博热搜举例

微博热搜 (weibo.cn)

//div[@class="m-container-max"]   匹配 class 属性为 "m-container-max" 的div标签
也可以不指定标签类型

web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天,ui自动化,python,selenium,自动化,selenium

//*[@class="m-container-max"]

(上述的*是通配符)
上述xpath 匹配任意类型的标签,且标签的 class 属性为 m-container-max

//*[@class]
上述表达式匹配所有具备class 属性的任意标签

//div[@id="app" and @class="m-container-max"]
and 可以拼接多个属性

在xpath中,一个点表示自己/.,两个点表示父元素/..

web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天,ui自动化,python,selenium,自动化,selenium

//span[text()="要闻"]
上述表达式根据
标签对中间的文本值定位(不需要加@)

web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天,ui自动化,python,selenium,自动化,selenium

可以不指定标签类型
//*[text()="要闻"]

也可以匹配所有有文本的
//span[text()]

//span[contains(text(), "要闻")]
上述表达式可以模糊匹配文本

代码示例可在资源绑定中自行下载,如有疑问,可在评论区下留言文章来源地址https://www.toymoban.com/news/detail-796146.html

到了这里,关于web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • web自动化测试入门篇04——selenium+python基础方法封装

    web自动化测试入门篇04——selenium+python基础方法封装

        😏 作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡 主页地址:【Austin_zhai】 🙆 目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。 💎 声明:博主日常工作较为繁忙,文章会不定期更新,各类行业或职场问

    2024年02月03日
    浏览(17)
  • 【python】之selenium模块,实现Web端自动化测试!【基础篇】

    【python】之selenium模块,实现Web端自动化测试!【基础篇】

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接调用浏览器,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏等。我们可以使用selenium很容易完成之

    2024年02月06日
    浏览(17)
  • 基于web应用的UI自动化、跨浏览器测试、测试结果分析:Selenium 开源的自动化测试工具基础教程

    作者:禅与计算机程序设计艺术 Selenium是一个开源的自动化测试工具,它提供了基于web应用的UI自动化、跨浏览器测试、测试结果分析等功能。它提供的功能包括:自动化控制浏览器、操纵表单、点击链接及按钮、验证页面元素、执行JavaScript代码、生成PDF文件、模拟移动设备

    2024年02月09日
    浏览(13)
  • Web自动化测试(一)(全网最给力自动化教程)

    Web自动化测试(一)(全网最给力自动化教程)

    2.1 操作元素基本方法 2.2 常用8种元素定位(Firebug和firepath) 2.3 xpath定位 正文 前言 前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架。我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的API。 本

    2024年02月02日
    浏览(9)
  • 【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)

    【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)

    本文大纲截图: UnitTest框架: PyTest框架: 框架: 框架英文单词 framework,为解决一类事情的功能的集合。需要按照框架的规定(套路)去书写代码。 概念:UnitTest是python自带的一个单元测试框架,用它来做单元测试 自带的框架:不需要单独按照,只要安装了 python就可以用

    2023年04月09日
    浏览(11)
  • 【Web UI自动化测试】Web UI自动化测试之日志收集篇(全网最全)

    【Web UI自动化测试】Web UI自动化测试之日志收集篇(全网最全)

    本文大纲截图:   日志: 用于记录系统运行时的信息,对一个事件的记录,也称为 Log 。 日志作用: 1)调试程序 2)了解系统程序运行的情况是否正常 3)系统程序运行故障分析与问题定位 4)用来做用户行为分析和数据统计 日志级别: 日志级别:指日志信息的优先级、重

    2024年02月12日
    浏览(14)
  • 自动化测试: Selenium 自动登录授权,再 Requests 请求内容

    自动化测试: Selenium 自动登录授权,再 Requests 请求内容

    Selenium 自动登录网站、截图及 Requests 抓取登录后的网页内容。一起了解下吧。 Selenium: 支持 Web 浏览器自动化的一系列工具和库的综合项目。 Requests: 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。   Selenium 实现,相当于模拟用户手动打开浏览器、进行登录的过程。

    2024年01月21日
    浏览(10)
  • 全网最详细的自动化测试(Jenkins 篇)

    全网最详细的自动化测试(Jenkins 篇)

    Robot Framework 概念 Robot Framework 安装 Pycharm + Robot Framework 环境搭建 Robot Framework 介绍 Jenkins 自动化测试 Robot Framework是一个基于Python的,可扩展的驱动的自动化测试框架。 它有几个主要特点:  使用简单易用的表格式语法创建测试用例; 提供从现有扩展到更高级别

    2024年02月09日
    浏览(28)
  • 自动化测试之web自动化(Selenium)

    自动化测试之web自动化(Selenium)

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! yycnblog 自动化测试概念:让程序代替人为去验证程序功能的过程,本

    2024年03月15日
    浏览(28)
  • 火爆全网,Python自动化测试-openpyxl操作测试(详细)

    当做自动化测试时,测试用例逐渐变多情况下,如果所有测试用例都通过代码管理将会使得代码十分臃肿,而且维护成本会很高; 所以我们一般会通过Excel去管理所有的测试用例,而openpyxl库提供了访问Excel的方法 openpyxl的介绍 一个Python库,用于读取/写入Excel 2010 xlsx 、xlsm 、

    2024年02月11日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包