Python实践之三种时间等待方式:进程等待、隐性等待和显性等待

"""
等待三种方式
1、进程等待  time.sleep()
2、隐性等待(等待资源加载完成)  driver.implicitly_wait(5)  接收浮点型数据,表示超时时间,最多等待
3、显性等待 (条件等待) WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(locator))
"""

 1、进程等待

需要导入time模块,time.sleep(1),进程休眠1s后再执行,项目中常用等待方式。和浏览器没有关系,每个需要等待的时候均需要time.sleep()语句。

例如:

from selenium import webdriver

from selenium.webdriver.common.by import By

import time


driver=webdriver.Chrome()

driver.maximize_window()

driver.get("http://xxx.testedu.com/index.php?s=/index/search/index.html") #打开首页

ele=driver.find_element(By.LINK_TEXT,"登录") #首页点击登录

ele.click()

ele_account=driver.find_element(By.NAME,"account")
ele_account.send_keys("test")

time.sleep(1)  #进程休眠1s后再执行后面的代码

ele_password=driver.find_element(By.NAME,"pwd")
ele_password.send_keys("password")

time.sleep(1)  #进程休眠1s,即输入密码后,等1s才执行寻找登录元素,点击登录元素的动作

button_login=driver.find_element(By.XPATH,"//button[@type='submit'][text()='登录']")

button_login.click()

2、隐性等待

等待资源加载完成,最多等待的时间,时间可以是浮点型,driver.implicitly_wait(5),项目中用的比较少。和浏览器有关系,只需要申明一次,是全局有效。

from selenium import webdriver

from selenium.webdriver.common.by import By


driver=webdriver.Chrome()

driver.maximize_window()

driver.implicitly_wait(0.1)  #隐性等待,只要找到元素就执行后面的,如果没有找到最长等待0.1s后就执行后面的

driver.get("http://xxx.testedu.com/index.php?s=/index/search/index.html")



ele=driver.find_element(By.LINK_TEXT,"登录")
ele.click()

ele_account=driver.find_element(By.NAME,"account")
ele_account.send_keys("test")

ele_password=driver.find_element(By.NAME,"pwd")
ele_password.send_keys("password")

button_login=driver.find_element(By.XPATH,"//button[@type='submit'][text()='登录']")

button_login.click()


home_text=driver.find_element(By.CSS_SELECTOR,".menu-hd")


print(home_text.text)   #获取元素中的文本

driver.quit()

3、显性等待,即条件等待,在给定的时间内循环按照条件寻找元素,如果有就返回,如果没有就抛出异常,如:10s时间内每0.5s循环一次寻找元素

WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(locator))

常用的四种显性等待如下:

#普通的寻找元素,寻找一个元素,寻找的元素都是存在于HTML中的元素,可以有不可见元素
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(locator))

#寻找的元素必须是,显示在界面中的元素,可点击,可以输入
WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(locator))

#寻找的元素必须是,没有显示在界面上的
WebDriverWait(driver,10,0.5).until(EC.invisibility_of_element_located(locator))

#普通的寻找所有元素
WebDriverWait(driver,10,0.5).until(EC.presence_of_all_elements_located(locator))
from selenium import webdriver

from selenium.webdriver.common.by import By


from selenium.webdriver.support.wait import WebDriverWait  #导包等待的对象

from selenium.webdriver.support import expected_conditions as EC  #导包等待的条件的集合包,并设置别名

driver=webdriver.Chrome()

driver.maximize_window()

driver.get("http://xxx.testedu.com/index.php?s=/index/search/index.html")

ele=driver.find_element(By.LINK_TEXT,"登录")
ele.click()

ele_account=driver.find_element(By.NAME,"account")
ele_account.send_keys("test")

ele_password=driver.find_element(By.NAME,"pwd")
ele_password.send_keys("password")

button_login=driver.find_element(By.XPATH,"//button[@type='submit'][text()='登录']")

button_login.click()

locator=(By.CSS_SELECTOR,".menu-hd")  #定位元素方式和定位元素的值

#根据定位元素方式和定位元素的值,每0.5s寻找一次元素,找到即返回元素,循环时间超过10s,抛出异常-未找到元素
home_text=WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(locator)) 


print(home_text.text)   #获取元素中的文本

你可能感兴趣的:(前端,python)