首页 > 编程语言 > 详细

Selenium系列教程(五)元素等待与操作(基于 Python)

时间:2020-09-13 17:16:04      阅读:62      评论:0      收藏:0      [点我收藏+]

一、元素等待

1.1 强制等待

import time
time.sleep(5)  # 固定休眠5秒

1.2 隐式等待

创建driver时,为浏览器对象创建一个等待时间,整个 driver 的会话周期内设置一次即可。它并不影响脚本的执行速度,若元素可以定位到则继续执行,若定位不到则以轮询的方式不断判断元素是否被定位到。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://localhost:63342/webtest/demo.html")

driver.implicitly_wait(10)

driver.quit()

1.3 显示等待

等到某个条件满足后,再执行操作(程序每隔 x 秒查询一次,若条件成立则执行下一步,否则继续等待,超过设置的最长时间条件仍不成立则抛出 TimeoutException)

WebDriverWait 显示等待类:WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None):

  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔(步长)时间,默认为0.5S
  • ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常

WebDriverWait 一般和 until()、until_not() 方法配合使用:

  • until:直到条件成立
  • until_not:直到条件不成立

expected_condition 模块提供了希望发生的条件,如 presence_of_element_located 元素存在、visibility_of_element_located 元素可见、element_to_be_clickable 元素可点击,常用操作如下:

expected_condition
方法 说明
title_is 判断当前页面的 title 是否完全等于(==)预期字符串,返回布尔值
title_contains 判断当前页面的 title 是否包含预期字符串,返回布尔值
presence_of_element_located 判断某个元素是否被加到了 dom 树里,并不代表该元素一定可见
visibility_of_element_located 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于 0
visibility_of 跟上面的方法做一样的事情,只是上面的方法要传入 locator,这个方法直接传定位到的 element 就好了
presence_of_all_elements_located 判断是否至少有 1 个元素存在于 dom 树中
text_to_be_present_in_element 判断某个元素中的 text 是否 包含 了预期的字符串
text_to_be_present_in_element_value 判断某个元素中的 value 属性是否包含 了预期的字符串
frame_to_be_available_and_switch_to_it 判断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False
invisibility_of_element_located 判断某个元素中是否不存在于dom树或不可见
element_to_be_clickable 判断某个元素中是否可见并且是 enable 的,这样的话才叫 clickable
staleness_of 等某个元素从 dom 树中移除,注意,这个方法也是返回 True或 False
element_to_be_selected 判断某个元素是否被选中了,一般用在下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be 跟上面的方法作用一样,只是上面的方法传入定位到的 element,而这个方法传入 locator
alert_is_present 判断页面上是否存在 alert

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



 

 

示例代码:

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.get(http://www.baidu.com)

WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
driver.find_element(By.ID, "kw").send_keys("test")

 

二、元素基本操作

from time import sleep

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.get(http://www.baidu.com)
WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))

ele = driver.find_element(By.ID, "kw")

# 输入
ele.send_keys("test")
sleep(1)
# 清空输入框文本
ele.clear()
# 获取元素标签类型
print(ele.tag_name)
# 点击
driver.find_element(By.ID, "su").click()

ele = driver.find_element(By.LINK_TEXT, "新闻")
# 获取元素 text 属性
print(ele.text)
ele.get_property()


# #  获取元素标签的内容
# ele.get_attribute(‘textContent‘)
# # # 获取元素内的全部HTML
# ele.get_attribute(‘innerHTML‘)
# # # 获取包含选中元素的HTML
# ele.get_attribute(‘outerHTML‘)

# ele.is_displayed()
# ele.is_enabled()
# ele.is_selected()
# ele.location
# ele.location_once_scrolled_into_view
# ele.parent
# ele.rect
# ele.screenshot()
# ele.screenshot_as_base64
# ele.screenshot_as_png
# ele.submit()
# ele.value_of_css_property()

 

Selenium系列教程(五)元素等待与操作(基于 Python)

原文:https://www.cnblogs.com/sharef/p/13633628.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!