Selenium自动化测试:详解显示等待和条件类

这篇具有很好参考价值的文章主要介绍了Selenium自动化测试:详解显示等待和条件类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selenium的显示等待

在进行UI自动化测试的时候,我们为了保持用例的稳定性,往往要设置显示等待,显示等待就是说明确的要等到某个元素的出现或者元素的某些条件出现,比如可点击、可见等条件,如果在规定的时间之内都没有找到,那么就会抛出Exception.

最新版selenium已经改变了不少语法规则,这篇文章仅适用于之前的老版本

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

class TestCase:
	def __init__(self):
		self.driver = webdriver.Chrome(executable_path="./driver/chromedriver")
		self.driver.get('http://www.baidu.com')
		# sleep(2)
		

	def test_wait(self)
	wait = WebDriverWait(self.driver,2)
	wait.until(EC.title_is('百度一下,你就知道‘))
	self.driver.find_element_by_id('kw').send_keys('selenium')
	self.driver.find_element_by_di('su').click()


上面是用Selenium写的一个测试用例,展示了Selenium中显示等待的使用方式,其中会使用到expected_conditions模块和WebDriverWait类

注意这里expected_conditions是一个py文件的文件名,也就是一个模块名,这个模块下面有很多的条件类,而我们用例中使用的title_is就是一个条件类。

WebDriverWait是一个类,这个类的作用就是根据一定的条件,不断的检查这个条件是否被满足了。

WebDriverWait类只有两个用法:

  • 一个是until直到满足某个条件

  • 另一个是until_not直到不满足某个条件。

class WebDriverWait(object):
    def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):


WebDriverWait有四个参数分别是

  • driver驱动,

  • timeout超时时间

  • poll_frequency=POLL_FREQUENCY轮训时间,也就是去判断条件是否满足的时间间隔,默认是0.5秒,

  • ignored_exceptions=None在等待的过程中需要忽略的异常,是一个可迭代的异常类集合,比如我们可以设置一个list,里面是[NoSuchElementException,NoSuchAttributeException,InvalidElementStateException…],默认情况下,是一个元组,只包含一个NoSuchElementException,因为只有元素出现,才能去判断条件是否满足,在不断轮训的过程中,肯定会发生NoSuchElementException,这个时候必须忽略掉这个异常,不然程序就会中断。

其中driver和timeout是毕传的位置参数,另外两个是选择传递的关键字参数,如果不传都有指定的默认值。

下面就进入我们今天的主题,selenium中的等待条件的讨论

等待条件

条件类的实现原理

在selenium.webdriver.support.expected_conditions这个模块里,存放着所有的等待条件,每个条件类的结构都是一样的一个__init__构造方法和一个__call__方法。

在python中,如果想把类型的对象当做函数来使用,那么就可以给这个类实现__call__方法,如下:

class TestCase:
    def __init__(self):
        self.driver = webdriver.Chrome(executable_path="./driver/chromedriver")
        self.driver.get('http://www.baidu.com')
        # sleep(2)

    def __call__(self):
        print(self.driver.title)

if __name__ == '__main__':
    case = TestCase()
    case()


case()对象的调用,就会执行__call__方法里面的逻辑打印当前页面的标题,我们取一个selenium的实现类:

class presence_of_element_located(object):

    def __init__(self, locator):
        self.locator = locator

    def __call__(self, driver):
        return _find_element(driver, self.locator)


这个条件类的意思是判断一个元素是否已经渲染到页面当中,在使用这个条件的时候需要先实例化,传入元素的定位,然后要进行判断的时候需要对实例对象进行调用并传入driver,对实例对象进行调用的时候就会执行__call__方法里的条件判断逻辑。

WebDriverWait是如何进行条件判断的

我们再回到文章开头看一下我们使用显示等待的代码:

wait = WebDriverWait(self.driver, 2)
wait.until(EC.title_is('百度一下,你就知道'))


先是实例化一个WebDriverWait对象,然后再调用until方法并且传递一个条件的实例对象,until方法里就会不断的去轮训条件是否满足。

def until(self, method, message=''):
    screen = None
    stacktrace = None

    end_time = time.time() + self._timeout
    while True:
        try:
            value = method(self._driver)
            if value:
                return value
        except self._ignored_exceptions as exc:
            screen = getattr(exc, 'screen', None)
            stacktrace = getattr(exc, 'stacktrace', None)
        time.sleep(self._poll)
        if time.time() > end_time:
            break
    raise TimeoutException(message, screen, stacktrace)


method这个参数就是我们传递进来的条件的实例对象,value = method(self._driver)这里就是进行对象的调用,也就是执行了__call__方法里的逻辑。

selenium里都有哪些条件

  • title_is 判断title是否出现

  • title_contains 判断title页面标题是否包含某些字符

  • presence_of_element_located 判断某个元素是否被加载到了dom树里,但是并不代表这个元素可见

  • url_contains 判断当前url是否包含某个url

  • url_matches 判断当前url是否符合某种格式

  • url_to_be 判断当前url是否出现

  • url_changes 判断当前url是否已经发生了变化

  • visibility_of_element_located 判断某个元素是否被添加到了dom树里,且宽高都大于0

  • visibility_of 判断看某个元素是否可见

  • presence_of_all_elements_located 判断至少有一个元素存在于dom树中,返回所有定位到的元素

  • visibility_of_any_elements_located 判断至少有一个元素在页面中可见

  • visibility_of_all_elements_located 判断是否所有元素都在页面中可见

  • text_to_be_present_in_element 判断指定的元素中是否包含了预期的字符串

  • text_to_be_present_in_element_value 判断指定的元素属性值中是否包含了预期的字符串

  • frame_to_be_available_and_switch_to_it 判断iframe是否可以switch进去

  • invisibility_of_element_located 判断某个元素是否在dom中不可见

  • element_to_be_clickable 判断某个元素是否可见并且是enable的,也就是说是是否可以点击

  • staleness_of 等待某个元素从dom中删除

  • element_to_be_selected 判断某个元素是否被选中了,一般用于下拉列表中

  • element_located_to_be_selected 与上面的意思一样,只不过上面实例化的时候传入的是元素对象,这个传入的是定位

  • element_selection_state_to_be 判断某个元素的选中状态是否符合预期

  • element_located_selection_state_to_be 与上面一样,只不过传值不同而已

  • number_of_windows_to_be 判断当前窗口数是否等于预期

  • new_window_is_opened 判断是否有窗口增加

  • alert_is_present 判断页面是否有弹窗

以上就是selenium支持的所有条件。

自定义条件类

那么多条件,其实我们也可以自己实现一个条件类,例如:

class page_is_load:
    
    def __init__(self, expected_title, expected_url):
        self.expected_title = expected_title
        self.expected_url = expected_url
    
    def __call__(self, driver):
        is_title_correct = driver.title == self.expected_title
        is_url_correct = driver.current_url == self.expected_url
        return is_title_correct and is_url_correct


上面是自己实现的一个条件类,根据页面的url和标题来判断页面是否被正确加载

class TestCase:
    def __init__(self):
        self.driver = webdriver.Chrome(executable_path="./driver/chromedriver")
        self.driver.get('http://www.baidu.com/')
        # sleep(2)

    def __call__(self):
        print(self.driver.title)

    def test_wait(self):
        wait = WebDriverWait(self.driver, 2)
        wait.until(page_is_load("百度一下,你就知道", "http://www.baidu.com/"))


<ul class="panel_head">
<span>感悟</span></ul>
<ul class="panel_body">
坚持就有赢的可能
<img src="https://img-blog.yssmx.cn/20201203084648159.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1d2Vpd2VpMTg2MA==,size_16,color_FFFFFF,t_70#pic_center">
</ul>
``


感谢大家看到最后

感谢每一个阅读我文章的人,你们的每一个阅读点赞就是我动力,下面准备了不少自动化测试的学习帮助,如果对观众朋友需要可以直接拿走

测试计划模板,测试用例设计模块,功能测试报告模块等(测试工作流程中所有模块)

软件测试经典面试题(收集近些年软件测试相关岗位面试题,有的是网络热传的大厂面试题,有的是找测试朋友的岗位真题)
*
百本软件测试PDF数据,(囊括测试基础、性能测试、自动化测试(Python/Java)、测试工具的使用等)*

④ 自动化测试(性能测试)知识点梳理路线图(从此自学有了方向不在迷茫)

本人录制的八大工具(框架)零基础使用教程(Robot Framework、Jmeter、Postman、fiddler、airtest、pytest、monkey、html前端基础)

Selenium,Selenium自动化测试,Selenium显示等待 条件类 UI测试 稳定性

Selenium,Selenium自动化测试,Selenium显示等待 条件类 UI测试 稳定性文章来源地址https://www.toymoban.com/news/detail-778618.html

到了这里,关于Selenium自动化测试:详解显示等待和条件类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 自动化测试工具——Selenium详解

    Selenium是一个用于Web应用程序测试的工具。是一个开源的Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,支持的浏览器包括IE(7, 8,

    2024年01月20日
    浏览(62)
  • 一文详解:自动化测试工具——Selenium

    Selenium是一个用于Web应用程序测试的工具。是一个开源的Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,支持的浏览器包括IE(7, 8,

    2024年01月16日
    浏览(59)
  • Python自动化测试之Selenium详解

    1.安装 完成自动化测试,需要配置三个东西。 selenium :pip就可以了 chrome :浏览器下载一个谷歌浏览器就行 chrome-driver :下载地址http://chromedriver.storage.googleapis.com/index.html 这里需要对应到自己的浏览器版本下载。 从浏览器上下载到本地后,本机mac上自动保存至Download/目录下

    2024年03月28日
    浏览(48)
  • Python + selenium 自动化测试框架详解

    项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里。 写通用的代码的。 其他3层想要的话,就可以直接调用。 例如: 读取测试数据的代码,读取配置信息的代码;截图的代码的,定位元素的代码等等 2.功能层(页面层) 功

    2024年02月03日
    浏览(51)
  • Python自动化测试利器selenium详解

    Selenium是一种常用的Web自动化测试工具,支持多种编程语言和多种浏览器,可以模拟用户的交互行为,自动化地执行测试用例和生成测试报告。Selenium基于浏览器驱动实现,结合多种定位元素的方法,可以实现各种复杂的Web应用程序的测试 自动化测试指软件测试的自动化,在

    2024年02月16日
    浏览(54)
  • Selenium+Pytest自动化测试框架详解

    selenium自动化+ pytest测试框架 本章你需要 一定的python基础——至少明白类与对象,封装继承; 一定的selenium基础——本篇不讲selenium,不会的可以自己去看selenium中文翻译网 测试框架有什么优点 代码复用率高,如果不使用框架的话,代码会很冗余 可以组装日志、报告、邮件等

    2024年02月08日
    浏览(98)
  • Selenium自动化教程:延时等待的3种方式!

    我们经常会碰到用selenium操作页面上某个元素的时候,需要等待页面加载完成后,才能操作。否则页面上的元素不存在,会抛出异常。或者碰到AJAX异步加载,我们需要等待元素加载完成后,才能操作。在进行UI自动化测试时,需要等元素加载完成,才能对元素进行操作,不然

    2024年01月24日
    浏览(52)
  • Selenium浏览器自动化测试框架详解_selenium 测试框架介绍

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新软件测试全套学习资料》

    2024年04月25日
    浏览(57)
  • Selenium浏览器自动化测试框架详解

    目录   selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链# 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 ​编辑 选项卡切换 无头浏览器 总结: Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试

    2024年02月08日
    浏览(51)
  • 自动化测试工具-Selenium:Selenium的核心三大组件详解

    目录 1. WebDriver 1.1 WebDriver的通信方式 1.2 WebDriver的功能 1.3 W3C推荐标准 2. Grid 3. IDE Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。官方对Selenium认可的三大组件或API分别是: WebDriver、Selenium IDE、Grid。 其中,WebDriver又被称为Selenium的核心。 下面本篇文章将深度介

    2024年02月03日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包