8 - selenium 常见元素操作:三大等待---强制等待、隐性等待、显性等待

selenium 常见元素操作

  • 三大等待
  • 三大切换(iframe,window,alert)
  • 下拉列表
  • 鼠标和键盘
  • js+ dom应用()
  • 上传操作

1、强制等待:time.sleep()

  必须等待固定时间后才可以往下运行

from selenium import webdriver
import time         # 强制等待需要导入time(译:泰姆),使用其中的 sleep(译:私立破) 方法

# 强制等待  sleep(译:私立破)
# 打开谷歌浏览器,建立会话。启动Chromedriver.exe  打开Chrome
driver = webdriver.Chrome()

# 访问百度首页
driver.get("http://www.baidu.com")
# 点击登录按钮
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()

# # 强制等待5秒,在进行下一步操作
time.sleep(10)
# 点击 用户名登录 按钮
driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
# 强制等待5秒后关闭浏览器
time.sleep(10)
driver.quit()

 

2、智能等待分为:隐性等待、显性等待

隐形等待:implicitly_wait(20)  (译:隐婆思类.威特)

  会话期间全局设置一次,所有的都通用(与显性等待不同)

  隐形等待元素不一定是可见的(与显性等待不同)

  智能等待的隐形等待:会话开始之后使用隐形等待,之后所有的找元素都会调用隐形等待,只有等待元素可见(被找到),等待命令执行;

  找元素是在HTML页面找,如果一旦加载到了这个HTML页面,得到了这样的文档,就可以开始找了,但是再找的时候元素不一定在页面上呈现出来了;如果没有加载出来、没有渲染出来,虽然已经加载过来了,但是还没有渲染成功;在加上电脑、网络不好,可能渲染的时候会很久,可以使用 sleep 一下

from selenium import webdriver

# 打开谷歌浏览器,建立会话。启动Chromedriver.exe  打开Chrome
driver = webdriver.Chrome()

# 智能等待的隐形等待:会话开始之后使用隐形等待,之后所有的找元素都会调用隐形等待,等待元素可见,等待命令执行
# implicitly_wait(译:隐婆思类.威特)
driver.implicitly_wait(20)

# 访问百度首页
driver.get("http://www.baidu.com")
# 点击登录按钮
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
# 点击 用户名登录 按钮
driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
# 关闭浏览器
driver.quit()

 

显性等待:他有非常多的条件;

与隐形等待的不同,隐形等待处理不了下面几种情况;可以处理很多中情况如:

等待元素可见

等待元素可用

等待新窗口出现

等待 url 地址=xxx的时候

等待 的上限是多少秒,每隔0.5秒去查看条件是否成立

明确等到某个条件满足之后,再去执行下一步操作。

程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到等待的元素可见

超过设置的最长时间,然后抛出TimeoutException. --- .

 

WebDriverWait类:显性等待类。until(译:恩太欧)

WebDriverWait(driver,等待时长,轮循周期).until(这个条件成立,才向下执行)  /until_ not()  

expected_ conditions as EC 模块: 提供了一系列期望发生的条件。(译:伊克斯盘课题的。肯迪深思)

 

常用的等待判断

presence_ _of_ element_ located:元素 存在(译:普软怎次.俄服.安乐门特.漏开提的)

 

visibility_of_element_located: 元素 可见(译:魏则比勒底.俄服.安乐门特.漏开提的)

element _to_ be_ clickable: 元素 可点击(译:安乐门特.图.比.快可bou)

ps:这个类有很多判断方法。具体自行了解。

 

什么时候用?

当你的操作,引起了页面的变化,而你接下来要操作变化 的元素的时候,就一定要加等待。

 

使用之前,引入相关的库

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC   (译:伊克斯盘课题的。肯迪深思)

from selenium.webdriver.common.by import By

使用方法:

1、先确定元素的定位表达式
web_ locator = 'XXXX'

2、调用 webdriverWait 类设置等待总时长、轮询周期。并调用期until、until_ not方法。 (译:恩太欧)
WebDriverWait(webdriver对象名,等待总时长,轮询周期),until(判断条件)

3、使用expected_ conditions对 应的方法来生成判断条件。
EC.类名((定位方式、定位表达式))
例: EC.visibility_of_element_located((By.id,web locator)))

 

例:等待百度登陆的弹出框出现,再去操作弹出框。

# 使用之前,引入相关的库
from selenium.webdriver.support.wait import WebDriverWait               # 等待条件
from selenium.webdriver.support import expected_conditions as EC        # 等待元素可见的条件
from selenium.webdriver.common.by import By                             # 定位类型八种定位方式
from selenium import webdriver


# 打开谷歌浏览器,建立会话。启动Chromedriver.exe  打开Chrome
driver = webdriver.Chrome()

# 访问百度首页
driver.get("http://www.baidu.com")
# 点击登录按钮
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()

# 等待元素 id=TANGRAM__PSP_10__footerULoginBtn 可见。等待上限是10秒。直到 条件可见
loc = (By.ID, "TANGRAM__PSP_10__footerULoginBtn")
# EC.visibility_of_element_located(loc)  # 等待元素可见的条件(译:魏则比勒底.俄服.安乐门特.漏开提的)
# until (译:昂题尔)直到什么什么条件成立
WebDriverWait(driver, 10, 0.5).until(EC.visibility_of_element_located(loc))

# 点击 用户名登录 按钮
driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
# 关闭浏览器
driver.quit()

 

posted @ 2020-01-15 12:57  守护往昔  阅读(2735)  评论(0编辑  收藏  举报