【python】Selenium with Python3使用总结(二)

【python】Selenium with Python3使用总结(二),第1张


一、查找元素

前提:首先需要先引入

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")

三、常用的 *** 作

funcValue
get(url)打开网页
send_keys(str)输入
click()点击
clear()清空
text获取标签文本内容
get_attribute(‘属性’)获取元素属性值
close()关闭当前标签页
quit()关闭浏览器,释放进程

三、find_element_by和find_element区别

selenium的find_element_by_*目前大部分是使用find_element(**)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/570148.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存