1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 从零开始编写Web自动化测试脚本(四)--自动化中的三种等待

从零开始编写Web自动化测试脚本(四)--自动化中的三种等待

时间:2024-04-30 18:57:31

相关推荐

从零开始编写Web自动化测试脚本(四)--自动化中的三种等待

第一章 Selenium+WebDriver环境搭建

第二章 Selenium定位方式

第三章 元素常用属性

第四章 自动化中的三种等待

第五章 自动化浏览器设置及句柄、窗口切换操作

第六章 鼠标、键盘操作

第七章 javascript在自动化中的应用

第八章 unittest&断言

第九章 ddt数据驱动

第十章 测试框架搭建过程Python+Selenium+BeautifulReport

文章目录

一、三种等待方式1、强制等待2、隐性等待3、显性等待 二、显性等待的使用方法三、判断元素的方法三、判断元素的操作

一、三种等待方式

1、强制等待

强制等待:sleep(x),顾名思义,强制让浏览器必须等待X秒,进行下一步操作,不管前后步骤是否完成。在Python中,是基于time模块的sleep方法来实现。

优点:使用简单。

缺点:浪费不必要的等待时间,影响测试用例的执行效率。

from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("")#强制等待3秒time.sleep(3)driver.quit()

2、隐性等待

隐性等待:implicitly_time(x),在x秒时间内,页面加载完成,进行下一步操作。隐性等待设置一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步操作。

优点:隐性等待对整个driver的周期都起作用,每一次操作都会调用隐性等待,只需设置一次即可。

缺点:①有时页面想要的元素早已加载完成,但因为网页上个别元素没有加载完,仍要等到页面全部完成才能执行下一步,使用不是很灵活。

②在等待时间内页面没有加载完成,时间一到也会进入下一步操作;这种情况可能出现要定位的元素没有出现,从而报元素无法找到的错误。

from selenium import webdriverdriver = webdriver.Chrome()#隐性等待5秒driver.implicitly_wait(5)driver.get("")driver.quit()

3、显性等待

显性等待:WebDriverWait类,对指定元素进行等待的一种等待方式。通过设置最大等待时间,检查频率对页面的元素来进行等待,一旦找到元素,则停止等待,进入后续步骤。

优点:等待判断准确,不会浪费多余的等待时间,可以提高测试用例的执行效率。

缺点:①使用相对前两种较为复杂

②多个元素的等待,需要多次写入

二、显性等待的使用方法

①首先需要导包,from selenium.webdriver.support.wait import WebDriverWait

②对WebDriverWait类进行实例化操作,

WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)

driver,浏览器驱动

timeout,最大等待时间

poll_frequency=POLL_FREQUENCY,间隔的频率时间

ignored_exceptions=None,超时后的异常信息,默认抛出NoSuchElementException

③调用until()和until_not()方法来等待元素

def until(method, message=‘’)

含义:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常。

参数:

method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False,一般使用lambda匿名函数。

message:提示信息,出现异常时会将这个信息输出在控制台。

def until_not(method, message=‘’)

含义:与until相反,当某个元素消失或什么条件不成立时则继续执行,参数与until相同。

import timefrom selenium import webdriverfrom mon.by import Byfrom selenium.webdriver.support.wait import WebDriverWaitdriver = webdriver.Chrome()driver.get("")# 定位到搜索栏,输入seleniumdriver.find_element(By.ID, "kw").send_keys("selenium")# 点击搜索按钮driver.find_element(By.ID, "su").click()time.sleep(15)# 定位到第一条搜索结果ele = driver.find_element(By.XPATH, '//*[@id="1"]/div/div/h3/a')# 实例化WebDriverWait对象,最大等待20秒,间隔1秒wait = WebDriverWait(driver, 20, poll_frequency=1)# 调用until()方法,一直等到第一条搜索结果存在于页面上wait.until(lambda x: ele.is_displayed())# 点击第一个搜索结果ele.click()time.sleep(3)driver.quit()

三、判断元素的方法

1、判断某个元素是否在页面上:ele.is_displayed()

2、判断某个元素是否被选中:ele.is_selected()

3、判断某个元素是否可被操作:ele.is_enables()

import timefrom selenium import webdriverfrom mon.by import Bydriver = webdriver.Chrome()driver.get("")# 打印搜索按钮是否存在页面上,返回Trueprint(driver.find_element(By.ID, "su").is_displayed())# 打印搜索按钮是否被选中,返回Falseprint(driver.find_element(By.ID, "su").is_selected())# 打印搜索按钮是否可操作,返回Trueprint(driver.find_element(By.ID, "su").is_enabled())time.sleep(3)driver.quit()

三、判断元素的操作

1、判断元素的操作:expected_conditions,是selenium的一个模块,主要用于对页面元素的加载进行判断,包括元素是否存在,是否可点击等。

2、expected_conditions模块导包,使用过程中,一般对其重命名为EC。

from selenium.webdriver.support import expected_conditions as EC

3、EC模块单独使用语法:

EC.方法名(参数)(driver)EC.方法名(参数).__call__(driver)

4、EC模块的常用操作

①title_is(title)

title_is(title)判断网页title是否等于特定文本(区分大小写),若完全相同则返回True,否则返回False。

②title_contains(title)

title_contains(title)判断网页title是否包含特定文本(区分大小写),若包含则返回True,否则返回False。

import timefrom selenium import webdriverfrom selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()driver.get("")time.sleep(3)#校验网页标题是否是"百度一下,你就知道"print(EC.title_is("百度一下,你就知道")(driver))#校验网页标题是否包含"百度"print(EC.title_contains("百度一下,你就知道")(driver))driver.quit()

③presence_of_element_located(locator)

presence_of_element_located(locator)判断一个元素存在于页面DOM树中,存在则返回元素本身,不存在则报错。

参数locator:定位器是一个数据类型元祖

(“元素定位方式”, “定位方式对应的值”)

(“id”, “id属性值”)或者(By.ID, “id属性值”)

④presence_of_elements_all_located(locator)

presence_of_elements_all_located(locator)判断定位的元素范围内,至少有一个元素存在于页面中,存在则以list形式返回元素本身,不存在则报错。

import timefrom selenium import webdriverfrom mon.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitdriver = webdriver.Chrome()driver.get("")time.sleep(3)# 定位百度热搜标题hot_search = (By.CLASS_NAME, "title-content-title")# 打印presence_of_all_elements_located()返回list形式元素本身print(WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located(hot_search)))# 定位搜索栏元素input_search = (By.ID, "kw")# 等待并判断搜索栏元素存在后,输入"selenium"WebDriverWait(driver, 10).until(EC.presence_of_element_located(input_search)).send_keys("selenium")time.sleep(3)driver.quit()

随手点赞一次,运气增加一份。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。