
Python+Selenium+Chrome 自动化测试(下)
---恢复内容开始---设置元素等待webDriver提供了两种类型的等待:显式等待和隐式等待显式等待不说了,就用简单的隐式等待即可
隐式等待
WebDriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0。它的用法相对来说要简单得多。
from selenium import webdriver
# 导入异常类型
from selenium.common.exceptions import NoSuchElementException
from time import ctime
driver = webdriver.Chrome()
# 设置隐式等待为10秒
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
try:
print(ctime())
driver.find_element_by_id("kw22").send_keys('selenium')
# 捕捉超时异常
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
implicitly_wait()默认参数的单位为秒,本例中设置等待时长为10秒。首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。 定位一组元素的方法(比之前的单个元素多加了个s)
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
例:
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(1)
# 定位一组元素
texts = driver.find_elements_by_xpath('//div/h3/a')
# 循环遍历出每一条搜索结果的标题
for t in texts:
print(t.text)
driver.quit()
窗口切换
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
# 获得百度搜索窗口句柄
sreach_windows = driver.current_window_handle
driver.find_element_by_link_text('登录').click()
driver.find_element_by_link_text("立即注册").click()
# 获得当前所有打开的窗口的句柄
all_handles = driver.window_handles
# 进入注册窗口
for handle in all_handles:
if handle != sreach_windows:
# 切换到句柄所代表的窗口
driver.switch_to.window(handle)
print('now register window!')
driver.find_element_by_name("userName").send_keys('username')
driver.find_element_by_name('password').send_keys('password')
time.sleep(2)
警告框处理在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
# 鼠标悬停至“设置”链接
link = driver.find_element_by_link_text('设置')
ActionChains(driver).move_to_element(link).perform()
# 打开搜索设置
driver.find_element_by_link_text("搜索设置").click()
time.sleep(1)
# 保存设置
driver.find_element_by_link_text("保存设置").click()
time.sleep(2)
# 打印警告框中的信息
print(driver.switch_to.alert.text)
# 通过driver.switch_to.alert()获取警告框,accept()接受警告框
driver.switch_to.alert.accept()
driver.quit()
下拉框.
from selenium import webdriver
from time import sleep
# 导入 Select类(Select类专门定位select标签)
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
# 鼠标点击“设置”链接
driver.find_element_by_link_text('设置').click()
sleep(1)
# 打开搜索设置
driver.find_element_by_link_text("搜索设置").click()
sleep(2)
# 定位搜索结果显示条数
sel = driver.find_element_by_xpath("//select[@id='nr']")
# <select name="NR" id="nr">
# <option value="10" selected="">每页显示10条</option>
# <option value="20">每页显示20条</option>
# <option value="50">每页显示50条</option>
# </select>
# 以上是该下拉框的源码.value值就在这里找
# select_by_value(value)方法用于定位选项中的value值
Select(sel).select_by_value('50') # 显示50条
driver.quit()
上传文件只需要定位到[上传文件]元素,然后发送文件路径即可
driver.find_element_by_name('file').send_keys("C:/Users/Administrator/Desktop/upload.html")
cookie信息
# 获得cookie信息
cookie= driver.get_cookies()
# 向cookie的name 和value中添加会话信息
driver.add_cookie({'name': 'key-aaaaaaa', 'value': 'value-bbbbbb'})
调用js代码
js="window.scrollTo(100,450);"
# 调用js代码的方法
driver.execute_script(js)
截图方法
driver.get_screenshot_as_file("D:\\baidu_img.jpg")
关闭浏览器
# 关闭单个窗口
driver.close()
# 关闭所有窗口
driver.quit() Leave Python+Selenium+Chrome 自动化测试(下) to:
Read more #it posts
Best Posts From LOVE TV
We have not curated any of lovetv's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From LOVE TV
- 《大侦探皮卡丘》:治愈感满满,用萌气化解亲情危机
- Python+Selenium+Chrome 自动化测试(下)
- Python+Selenium+Chromedriver 自动化测试(上)
- RivenCloud极云网络:2核1G内存1Gbps带宽1000GB月流量KVM架构,只需2.5美元/月
- HawkHost老鹰主机,美国、香港虚拟主机6折促销,10G SSD硬盘 不限流量,只需145元/年
- CloudCone洛杉矶MC机房独立服务器,4核8GB内存2TB HDD或240GB SSD硬盘100M带宽不限流量,月付59美元
- JustHost新西伯利亚VPS主机,1核512GB内存5GB HDD硬盘200Mbps带宽KVM架构,月付最低8.9元起
- zji高配IPMI香港服务器,2*E5-2660,256G内存,6x1T SSD,100Mbps独享带宽,CN2低延时直连,带ddos防御
- HostDare洛杉矶QN机房终身75折,美国CN2三网直连KVM架构,1核756M内存35GBHDD80Mbps带宽600GB月流量,每年只需29.99美元
- wikihost香港微基主机Cera机房,KVM架构三网CMI直连大带宽香港高防VPS,首月五折购买,终身75折