一、获取 Web Element
1. 通过不同的页面属性获取 element
# 通过 Id 获取
element = driver.find_element_by_id('id')
# 通过 class 获取
element = driver.find_element_by_class_name('class')
# 通过 name 获取
element = driver.find_element_by_name('name')
# 通过文案获取
element = driver.find_element_by_link_text('点击这里')
# 通过 标签头类型 获取
element = driver.find_element_by_tag_name('input')
# 通过 xpath 定位获取
element = driver.find_element_by_xpath("//div[@class='userName']")
# 通过 css 定位获取
element = driver.find_element_by_css_selector('div.highlight')
# 通过 css 定位获取元素的集合,上述方法都可以这么使用
elements = driver.find_elements_by_css_selector('div.highlight')
**说明: 一般会使用 ** find_element( self, by=By.ID, value=None )
方法获取 element
# 需要引入 By
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID,'userName')
# or 获取一个 element 集合
elements = driver.find_elements(By.ID,'username')
2、显示等待获取Element
**说明:**显示等待的代码定义了等待条件,只有该条件触发,才执行后续代码。平时尽量少使用 time.sleep()
等待操作,这种情况是指定了固定的等待时长。 存在一些特别方便的方法,可以使你的代码只等待需要的时常,而不是固定的时常。
# 导入依赖包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 设置显示等待 10 秒,超时时长会抛 TimeoutException 异常
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, 'username')))
方法封装:
def find_element_wait(self, by=By.ID, value=None):
"""
函数说明: 查找定位元素,5 秒内没有找到则抛出 TimeoutException
"""
element = None
try:
# 5s 内没有找到指定的元素,则会抛 TimeoutException 异常
wait = WebDriverWait(driver=self.driver, timeout=5)
res = wait.until(EC.presence_of_element_located((by, value)))
element = self.driver.find_element(by=by, value=value)
except TimeoutException as TE:
log.error("等待超时,没有找到定位元素 : ", TE.msg)
return element