wangwt123

UI自动化测试-WebDriverWait类的方法

WebDriverWait类的方法

1、为什么要引用WebDriverWait类?

在UI自动化测试中,经常会出现由于网络加载慢等问题而使资源加载不出来,从而使测试效率大大折扣。因此我们要引用WebDriverWait类。

2、在UI自动化测试中,关于等待有三点:

a、固定等待,也就是使用sleep()方法

b、隐式等待,使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间

c、显式等待,主要指的是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继续执行,那么如果判断失败,就会报TimeOutExpection的异常信息。

3、使用WebDriverWait类,我们需要导入它,导入的命令为:

from selenium.webdriver.support.ui import WebDriverWait

4、等待实战

4-1:固定等待+隐式等待:使用sleep()方法和implicitly_wait()方法--以腾讯文件为例

 1 from selenium import webdriver  #包:selenium,模块:webdriver
 2 from selenium.webdriver.common.by import By
 3 import  time as t
 4 driver=webdriver.Chrome()
 5 driver.maximize_window()
 6 driver.get("https://file.qq.com/")
 7 driver.implicitly_wait(20)
 8 #进入第一个iframe
 9 driver.switch_to.frame('login_frame1')
10 t.sleep(3)#进入第二个iframe
11 driver.switch_to.frame('ptlogin_iframe')
12 t.sleep(3)
13 #点击密码登录
14 driver.find_element(By.ID,'switcher_plogin').click()
15 t.sleep(3)
16 #"支持QQ号/邮箱/手机号登录"框的断言验证
17 divText1=driver.find_element(By.ID,'uin_tips')
18 assert divText1.text=="支持QQ号/邮箱/手机号登录"
19 print(divText1.text)
20 t.sleep(2)
21 #"请输入密码"框的断言验证
22 divText2=driver.find_element(By.ID,'pwd_tips')
23 assert divText2.text=="请输入密码"
24 print(divText2.text)
25 t.sleep(2)
26 driver.quit()

之所以两个iframe框架原因:

4-2:显式等待--以腾讯文件为例

在显示等待里我们需要用到WebDriverWait()方法和until()方法:

我们使用WebDriverWait()方法,这个方法的导入在前文开头以书写

而until()方法:

    def until(self, method, message=''):
        """Calls the method provided with the driver as an argument until the \
        return value does not evaluate to ``False``.

        :param method: callable(WebDriver)
        :param message: optional message for :exc:`TimeoutException`

该方法的形式参数中,method是方法,其实这个方法要导入的代码是:

from selenium.webdriver.support import  expected_conditions as es

代码如下:

 1 from selenium import webdriver  #包:selenium,模块:webdriver
 2 from selenium.webdriver.common.by import By
 3 import  time as t
 4 from selenium.webdriver.support.ui import WebDriverWait
 5 from selenium.webdriver.support import  expected_conditions as es
 6 driver=webdriver.Chrome()
 7 driver.maximize_window()
 8 driver.get("https://file.qq.com/")
 9 driver.implicitly_wait(20)  #网络运行速度
10 # 进入第一个iframe
11 driver.switch_to.frame('login_frame1')
12 t.sleep(3)
13 # 进入第二个iframe
14 driver.switch_to.frame('ptlogin_iframe')
15 t.sleep(3)
16 
17 wait=WebDriverWait(driver=driver,
18                    timeout=12).until(
19     method=es.element_to_be_clickable((
20         By.ID,'switcher_plogin')))  #timeout=12是资源等待时间
21 # 使用时注意事项:es.element_to_be_clickable((By.ID,'switcher_plogin')),这个方法要有两个括号,因为参数只能是一个元组。
22 t.sleep(3)
23 driver.quit()

4-3:综合实战--以新浪邮箱为例

 1 from selenium import webdriver  #包:selenium,模块:webdriver
 2 from selenium.webdriver.common.by import By
 3 import  time as t
 4 from selenium.webdriver.support.ui import WebDriverWait
 5 from selenium.webdriver.support import  expected_conditions as es
 6 driver=webdriver.Chrome()
 7 driver.maximize_window()
 8 driver.get("https://mail.sina.com.cn/")
 9 driver.implicitly_wait(12)
10 driver.find_element(By.LINK_TEXT,"登录").click()
11 divText=WebDriverWait(
12     driver=driver,
13     timeout=12).until(
14     method=es.element_to_be_clickable((
15         By.CSS_SELECTOR,'body > div.mailLoginBox > div > div.mainBox.bg1 > div > div > div:nth-child(6) > div.loginBox > div.freeMailbox > div.freeError > span.loginError.tip11')))
16 assert divText.text=='请输入邮箱名'
17 print(divText.text)
18 driver.quit()

5、判断元素是否可见--以百度主页面的”关于百度“为例

from selenium import webdriver  #包:selenium,模块:webdriver
from selenium.webdriver.common.by import By
import  time as t
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import  expected_conditions as es
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.cn/")
driver.implicitly_wait(20)
about=WebDriverWait(
    driver=driver,
    timeout=12).until(
    method=es.visibility_of_element_located((
        By.LINK_TEXT,'关于百度')))  #精确查找
about.click()
t.sleep(3)
driver.quit()

 

posted on 2022-06-29 18:06  DOUBLE快乐  阅读(250)  评论(0编辑  收藏  举报

导航