一、查找元素
前提:首先需要先引入
from selenium import webdriver
from selenium.webdriver.common.by import By
查找元素的方法
• find_element(By.ID,”loginName”)
• find_element(By.NAME,”SubjectName”)
• find_element(By.CLASS_NAME,”u-btn-levred”)
• find_element(By.TAG_NAME,”input”)
• find_element(By.LINK_TEXT,”退出”)
• find_element(By.PARTIAL_LINK_TEXT,”退”)
• find_element(By.XPATH,”.//*[@id=’Title”)
• find_element(By.CSS_SELECTOR,”[type=submit]”)
1.1、通过ID查找元素
如果找不到任何元素,会抛出 NoSuchElementException 异常
可以这样查找表单(form)元素:
login_form = driver.find_element(By.ID,”loginForm”)
1.2、通过Name查找元素
name属性为 username 的元素可以像下面这样查找:
username = driver.find_element(By.NAME,”username ”)
1.3、通过XPath查找元素
使用XPath的主要原因之一就是当你想获取一个既没有id属性也没有name属性的元素时, 可以通过XPath使用元素的绝对位置来获取(这是不推荐的),或相对于有一个id或name属性的元素 (理论上的父元素)的来获取你想要的元素。
XPath定位器也可以通过非id和name属性查找元素。
绝对的XPath是所有元素都从根元素的位置(HTML)开始定位,只要应用中有轻微的调整,会就导致你的定位失败。
但是通过就近的包含id或者name属性的元素出发定位你的元素,这样相对关系就很靠谱, 因为这种位置关系很少改变,所以增强测试的健壮性。
举例:
可以这样查找表单(form)元素:
#绝对定位 (页面结构轻微调整就会被破坏)
login_form = driver.find_element(By.XPATH, "/html/body/form[1]")
#HTML页面中的第一个form元素
login_form = driver.find_element(By.XPATH, "//form[1]")
#包含 id 属性并且其值为 loginForm 的form元素
login_form = driver.find_element(By.XPATH, "//form[@id='loginForm']")
username元素可以如下获取:
#第一个form元素中包含name属性并且其值为 username 的input元素
username = driver.find_element(By.XPATH, "//form[input/@name='username']")
#id为 loginForm 的form元素的第一个input子元素
username = driver.find_element(By.XPATH,"//form[@id='loginForm']/input[1]")
#第一个name属性为 username 的input元素
username = driver.find_element(By.XPATH,"//input[@name='username']")
“Clear” 按钮可以如下获取:
clear_button = driver.find_element(By.XPATH,"//input[@name='continue'][@type='button']")
clear_button = driver.find_element(By.XPATH,"//form[@id='loginForm']/input[4]")
1.4、通过链接文本获取超链接
示例:
Are you sure you want to do this?
Continue
Cancel
continue.html 超链接可以被这样查找到:
continue_link = driver.find_element(By.LINK_TEXT,”Continue”)
1.5、通过标签名查找元素
示例:
Welcome
Site content goes here.
h1 元素可以如下查找:
heading1 = driver.find_element(By.TAG_NAME,”h1”)
1.6、通过Class name 定位元素
示例:
Site content goes here.
p 元素可以如下查找:
content = driver.find_element(By.CLASS_NAME,”content”)
1.7、通过CSS选择器查找元素
示例:
Site content goes here.
p 元素可以如下查找:
content = driver.find_element(By.CSS_SELECTOR,'p.content')
二、等待页面加载完成
显式等待WebDriverWait()、隐式等待implicitly_wait()、强制等待sleep()
2.1、显式等待from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。
默认检测频率为0.5s,默认抛出异常为:NoSuchElementException
2.2、隐式等待如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。
默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element(By.ID,"myDynamicElement")
三、常用的 *** 作
func | Value |
---|---|
get(url) | 打开网页 |
send_keys(str) | 输入 |
click() | 点击 |
clear() | 清空 |
text | 获取标签文本内容 |
get_attribute(‘属性’) | 获取元素属性值 |
close() | 关闭当前标签页 |
quit() | 关闭浏览器,释放进程 |
三、find_element_by和find_element区别
selenium的find_element_by_*目前大部分是使用find_element(**)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)