显式等待和隐式等待的区别是什么(显示等待和隐式等待区别)

各位网友们好,相信很多人对显式等待和隐式等待的区别是什么都不是特别的了解,因此呢,今天就来为大家分享下关于显式等待和隐式等待的区别是什么以及显示等待和隐式等待区别的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

各位网友们好,相信很多人对显式等待和隐式等待的区别是什么都不是特别的了解,因此呢,今天就来为大家分享下关于显式等待和隐式等待的区别是什么以及显示等待和隐式等待区别的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录一览

selenium显示等待和隐式等待的区别

selenium显示等待和隐式等待的区别
1、隐式等待
隐式等待,就是在创建driver时,设置全局元素等待超时时间。当要查找元素,而这个元素没有马上出现时,告诉 WebDriver 查询 Dom 一定时间,实际上浏览器会在你自己设定的时间内不断的刷新页面去寻找我们需要的元素。默认值是 0,但是设置之后,这个时间将在WebDriver 对象实例整个生命周期都起作用。(处理 Table 对象时,需要将此设置为默认值)

设置等待时长为10秒,首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位是,如 可以定位,则继续执行,如 定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第六秒定位到了元素则继续执行,若直到超出设置的时长10秒还没有定位到元素,则抛出异常。

2、显示等待
每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常(TimeoutException)

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔(步长)时间,默认为0.5S
ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
WebDriverWait()一般由until()或 until_not()方法配合使用
until(method, message=' '):调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method, message=' '):调用该方法提供的驱动程序作为一个参数,直到返回值为False

UI自动化测试中,Selenium的三种等待方式详解

  背景

  UI自动化过程中,必然会遇到加载问题、环境不稳定、网络慢的情况,如果不做任何处理就会 没有找到元素而报错。

  另外一种情况就是页面使用了ajax异步加载机制(现在都是resetful,客户端和服务端都是分离的),不知道页面是什么时候到达的。这时我们就要用到wait,而在 Selenium 中,我们一共有三种等待,分别是固定等待、隐式等待和显式等待。

   time.sleep

  固定等待,本质:让当前的线程睡眠,实质是线程的阻塞(blocking),用wait 方式实现。

  缺点:网络条件好浪费时间,严重影响项目的性能。

  好处:调试脚本可以用。

  implicitly_wait

  隐式等待,本质:在脚本的开始设置一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则可能抛出异常。隐式等待对整个driver周期都起作用,在最开始设置一次就可以了,不要当作固定等待使用。

  缺点:JavaScript一般都是放在我们的body的最后进行加载,实际这时页面的元素都已经加载完毕,我们却还在等待全部页面加载结束。

   WebDriverWait

  显式等待,本质:动态的等待,判断某一个元素是不是已经出现了,比如title是不是叫 百度 或百度搜索,根据动态的一些条件来轮询,它会不停的轮询去给我们检测,条件是成功还是失败,比如0.5s就检测一次这个元素在这个条件下是成功还是失败。同时设置轮询的超时时间。

  如果同时设置了显式等待和隐式等待,就看谁设置的等待时间长,谁的超时等待时间长,就用谁的执行。

   显式等待

  模块

  from selenium.webdriver.support.wait import WebDriverWait

   WebDriverWait 的源码

# Licensed to the Software Freedom Conservancy (SFC) under one

# or more contributor license agreements. See the NOTICE file

# distributed with this work for additional information

# regarding copyright ownership. The SFC licenses this file

# to you under the Apache License, Version 2.0 (the

# “License”); you may not use this file except in compliance

# with the License. You may obtain a copy of the License at

#

# http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing,

# software distributed under the License is distributed on an

# “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

# KIND, either express or implied. See the License for the

# specific language governing permissions and limitations

# under the License.

import time

from selenium.common.exceptions import NoSuchElementException

from selenium.common.exceptions import TimeoutException

POLL_FREQUENCY = 0.5 # How long to sleep inbetween calls to the method

IGNORED_EXCEPTIONS = (NoSuchElementException,) # exceptions ignored during calls to the method

class WebDriverWait(object):

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

“””Constructor, takes a WebDriver instance and timeout in seconds.

:Args:

– driver – Instance of WebDriver (Ie, Firefox, Chrome or Remote)

– timeout – Number of seconds before timing out

– poll_frequency – sleep interval between calls

By default, it is 0.5 second.

– ignored_exceptions – iterable structure of exception classes ignored during calls.

By default, it contains NoSuchElementException only.

Example:

from selenium.webdriver.support.ui import WebDriverWait

element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“someId”))

is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).

until_not(lambda x: x.find_element_by_id(“someId”).is_displayed())

“””

self._driver = driver

self._timeout = timeout

self._poll = poll_frequency

# avoid the pide by zero

if self._poll == 0:

self._poll = POLL_FREQUENCY

exceptions = list(IGNORED_EXCEPTIONS)

if ignored_exceptions is not None:

try:

exceptions.extend(iter(ignored_exceptions))

except TypeError: # ignored_exceptions is not iterable

exceptions.append(ignored_exceptions)

self._ignored_exceptions = tuple(exceptions)

def __repr__(self):

return ”.format(

type(self), self._driver.session_id)

def until(self, method, message=”):

“””Calls the method provided with the driver as an argument until the

return value is not False.”””

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)

def until_not(self, method, message=”):

“””Calls the method provided with the driver as an argument until the

return value is False.”””

end_time = time.time() + self._timeout

while True:

try:

value = method(self._driver)

if not value:

return value

except self._ignored_exceptions:

return True

time.sleep(self._poll)

if time.time() > end_time:

break

raise TimeoutException(message)

  参数:

   三种等待方式的实例

from selenium import webdriver

from time import sleep

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

# 三种等待方法

class TestCase(object):

def __init__(self):

self.driver = webdriver.Chrome()

self.driver.get(‘https://www.baidu.com’)

sleep(2)

def test_sleep(self):

self.driver.find_element_by_id(‘kw’).send_keys(“selenium”)

sleep(2) # 线程的阻塞 blocking wait 方式实现

self.driver.find_element_by_id(‘su’).click()

sleep(3)

self.driver.quit()

def time_implicitly(self):

self.driver.implicitly_wait(10)

self.driver.find_element_by_id(‘kw’).send_keys(“webdriver”)

self.driver.find_element_by_id(‘su’).click()

# sleep(2)

self.driver.quit()

def time_wait(self):

wait = WebDriverWait(self.driver,2,0.5)

wait.until(EC.title_is(‘百度一下,你就知道’))

self.driver.find_element_by_id(‘kw’).send_keys(“webdriver”)

self.driver.find_element_by_id(‘su’).click()

sleep(2)

self.driver.quit()

if __name__==”__main__”:

case = TestCase()

# case.test_sleep()

# case.time_implicitly()

case.time_wait()

(0)
小多多的头像小多多创始人

相关推荐

  • 喝喝葡萄酒的好处(喝葡萄酒的好处和坏处)

    大家好,本篇文章为大家解答以上问题,相信很多人对喝喝葡萄酒的好处都不是特别的了解,因此呢,今天就来为大家分享下关于喝喝葡萄酒的好处以及喝葡萄酒的好处和坏处的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

    2023年7月16日
  • 什么是证券公司

    证券公司(俗称:券商)是指依照公司法的规定,经国务院证券监督管理机构审查批准,从事证券轿滑经营业务的有限责任公司或者股份有限公司。它是非银行金融机构的一种,是从事证券经营业务的法定组织形式,是专门从事有价证券买卖的法人企业。分为证券经营公

    2024年2月2日
  • 韩国是西方国家

    韩国属庆数于东方国家。韩国位于东北亚朝鲜半岛南部,三面环海,西濒临黄海,与胶东半岛隔海相望,东南是朝鲜海峡,东边是日本海,北面隔着三八线非军事区与朝鲜相邻,领土面积占朝鲜半岛总面积的4/9。韩国历史上曾是中原王朝的藩属国,清末,清朝于甲午

    2023年10月6日
  • 卓北辰白问筠全文免费 卓北辰白问筠在线阅读

    卓北辰白问筠是著名作者卓北辰热门小说里面的主角。小说以形式来叙述,大大增加了难度。可想而知,作者对它倾注了多少心血!咱们接着往下看白问筠喜欢卓北辰十年。表白成功的第二天,她却意外在七年后的身体里醒来。卓北辰要结婚了,新娘不是她。……白问筠刚睁开眼,就被扇了一巴掌。她当场懵住了。还没回神,就听见一道熟悉男声点名道姓地呵斥她。“白问筠!我警告过你!不许动她!”

    2024年3月30日
  • 好听又沙雕的游戏网名

    1、上课谈恋爱2、北街如夢3、義氣秒殺4、桃靥5、你的心太挤6、挚ヽ7、我听闻,你始终一人8、初夏未眠9、小蔡小蔡,天生可爱10、感谢相遇11、孩子系ッ12、墨染13、时光衬人14、撕心裂肺旳疼痛15、命中无时莫

    2024年4月25日
  • 补钙最快的方法(成人补钙的方法)

    补钙最快的方法孩子补钙的方法分为食补和药补两种,年龄段不同,建议选择的方法也有所不同。要注意降低钙磷饮食,当血磷增高时,血钙也会发生降低,要注意低盐、低糖饮食,养成良好的生活方式和习惯。枸橼酸钙不需要胃酸的解离,即使是吃抑制胃酸的药物也可以

    2023年5月7日
  • 花开的声音唯美句子(关于花开的声音唯美句子简短)

    各位网友们好,相信很多人对花开的声音唯美句子都不是特别的了解,因此呢,今天就来为大家分享下关于花开的声音唯美句子以及关于花开的声音唯美句子简短的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

    2023年8月28日
  • 索爱最新手机(索爱有出新手机了吗)

    大家好,本篇文章为大家解答以上问题,相信很多人对索爱最新手机都不是特别的了解,因此呢,今天就来为大家分享下关于索爱最新手机以及索爱有出新手机了吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

    2023年8月4日
  • 王者荣耀实名认证(100个有效的实名认证游戏)

    各位网友们好,相信很多人对王者荣耀实名认证都不是特别的了解,因此呢,今天就来为大家分享下关于王者荣耀实名认证以及100个有效的实名认证游戏的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

    2023年6月21日
  • 百寿是指多少岁寿辰蚂蚁庄园(蚂蚁庄园多少颗爱心)

    大家好,本篇文章为大家解答以上问题,相信很多人对百寿是指多少岁寿辰蚂蚁庄园都不是特别的了解,因此呢,今天就来为大家分享下关于百寿是指多少岁寿辰蚂蚁庄园以及蚂蚁庄园多少颗爱心的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

    2023年8月19日
  • 咳嗽有痰怎么办(有痰咳嗽怎么办)

    咳嗽有痰怎么治最有效很多患者有时在咳嗽的时候会把痰带出来,其实有痰也是有一定好处的,因为痰液可以将呼吸道的粉尘、细菌排出体外,使呼吸道保持顺畅健康,防止有害物质侵入肺部引发感染。宝宝咳嗽也可以给予雾化治疗,如布地奈德、异丙托溴胺或沙丁胺醇等

    资讯 2023年7月24日
  • 累了的时候看看让你变强大的励志早安心语优美语句

      一、人生的意义不在于创造多少惊喜,而在于减少多少遗憾,在于当我们也白发苍苍的那一天,想起过去的人过去的事,能否因为付出而感激自己,又能否因为迁就而问心无愧。   二、有勇气并不…

    美文 2022年3月29日
  • 肠胃炎挂好水了有什么饮食(肠胃炎挂水后能喝酒吗)

    本文介绍:肠胃炎挂好水了有什么饮食,以及肠胃炎挂水后能喝酒吗对应的知识点记得收藏.本文目录一览:1、请问我急性肠胃炎刚好,吃什么食物和水果对肠胃功能恢复好?2、肠胃炎恢复期适宜吃什么食物3、急性肠胃炎恢复后该如何饮食才能养好肠胃?请问我急性肠胃炎刚好,吃什么食物和水果对肠胃功能恢复好?1、可以选

    2023年12月28日
  • 宝应特产

    宝应的特产有宝应荷藕、宝应藕粉、泾河大糕、慈菇、核桃乌青菜、泾河西瓜等。宝应县位于江苏省中部,淮河下游,里下河地区西部,扬州市北缘,介于北纬33°02′46″~33°24′55&Prime

    资讯 2023年5月7日
  • 胆结石胆囊炎饮食禁忌(胆结石患者的食物禁忌)

    胆结石禁忌食物患胆结石饮食禁忌如下:1、忌食含胆固醇、脂肪较高的食物,如动物内脏、蛋羹、肥肉、煎炸食物等,避免体内胆固醇、血脂含量较高加重结石。建议胆结石患者吃一些清淡、含高纤维的食物,以及清肝的食物。平时应该多进食新鲜的蔬菜和富含维生素的

    资讯 2023年7月20日