WebDriver 提供的八种定位方法:
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
WebDriver API
浏览器最大化: maximize_window() 设置浏览器宽、高: set_window_size(480, 800) 控制浏览器后退,前进,刷新: back() forward() refresh()
WebElement接口常用方法:
clear 清除元素的内容
send_keys 在元素上模拟按键输入
click 单击元素
submit 提交表单
size 返回元素的尺寸
text 获取元素的文本
get_attribute(name) 获得属性值
is_displayed() 设置该元素是否用户可见
ActionChains 类鼠标操作方法:
在WebDriver中,将关于鼠标操作的方法封装在ActionChains类中来使用:
perform() 执行所有ActionChains中存储的行为
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 鼠标悬停在一个元素上
click_and_hold() 按下鼠标左键在一个元素上
鼠标右击操作
对于ActionChains类所提供的鼠标方法与前面学过的click()方法的用法有所不同。
鼠标操作步骤:
from selenium.webdriver import ActionChains
导入提供鼠标操作的ActionChains类。
ActionChains(driver)
调用ActionChains()类,将浏览器驱动driver做为参数传入。
context_click(right_click)
context_click()方法用于模拟鼠标右键操作,在调用时需要指定元素定位。
perform()
执行所有ActionChains中存储的行为,可以理解成是对整个操作的提交动作。
drag_and_drop() 拖动
#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains ...
#定位元素的原位置
element = driver.find_element_by_name("xxx")
#定位元素要移动到的目标位置
target = driver.find_element_by_name("xxx")
#执行元素的移动操作
ActionChains(driver).drag_and_drop(element,target).perform()
move_to_element() 鼠标悬停(拖动+悬停)
#引入ActionChains类
from selenium.webdriver.common.action_chains
import ActionChains
#-------------------------------
'''鼠标拖动'''
element = driver.find_element_by_name("xxx") #定位元素的原位置
target = driver.find_element_by_name("xxx") #定位元素要移动到的目标位置
ActionChains(driver).drag_and_drop(element,target).perform()#执行元素的移动操作
#---------------------------
'''鼠标悬停'''
from selenium.webdriver import ActionChains
driver.implicitly_wait(10) #隐式等待10s
mouse_point=driver.find_element_by_xpath("/html/body/div[6]/div[3]/div[1]/div/div[2]/ul/li[2]/span") #定位目标点
ActionChains(driver).move_to_element(mouse_point).perform() #悬浮在这个点上
driver.find_element_by_link_text("陕西论坛").click() #点击文字
time.sleep(4) #强制等待4s
Keys 类键盘操作的常用方法:
Keys 类键盘操作的常用方法: 引入Keys类: from selenium.webdriver.common.keys import Keys 常用方法: send_keys(Keys.BACK_SPACE) 删除键(BackSpace) send_keys(Keys.SPACE) 空格键(Space) send_keys(Keys.TAB) 制表键(Tab) send_keys(Keys.ESCAPE) 回退键(Esc) send_keys(Keys.ENTER) 回车键(Enter) send_keys(Keys.CONTROL,'a') 全选(Ctrl+A) send_keys(Keys.CONTROL,'c') 复制(Ctrl+C) send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X) send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
...
#输入框输入内容
driver.find_element_by_id("kw1").send_keys("seleniumm")
time.sleep(3)
#删除多输入的一个m
driver.find_element_by_id("kw1").send_keys(Keys.BACK_SPACE)
time.sleep(3)
...
打印信息(断言的信息):
title
返回当前页面的标题
current_url
获取当前加载页面的URL
text
获取元素的文本信息
#获得前面title,打印
title = driver.title print title
#获得前面URL,打印
now_url = driver.current_url print now_url
#获得登录成功的用户,打印
now_user=driver.find_element_by_id("spnUid").text
print (now_user)
webdriver提供定位一组对象的方法:
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()
……
# 选择页面上所有的tag name 为input的元素
inputs = driver.find_elements_by_tag_name('input')
#然后从中过滤出tpye为checkbox的元素,单击勾选
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()
……
……
#选择所有的type为checkbox的元素并单击勾选
checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:
checkbox.click()
……
层级定位:
…… #点击Link1链接(弹出下拉列表) driver.find_element_by_link_text('Link1').click() #在父亲元件下找到link为Action的子元素 menu = driver.find_element_by_id('dropdown1').find_element_by_link_text('Another action') #鼠标移动到子元素上 ActionChains(driver).move_to_element(menu).perform() ……
WebDriver 控制js弹窗
在实际系统中,在完成某些操作时会弹出对话框来提示,主要分为"警告消息框","确认消息框","提示消息对话"三种类型的对话框。 1.警告消息框(alert) 警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作。 2.确认消息框(confirm) 确认消息框向用户提示一个"是与否"问题,用户可以根据选择"确定"按钮和"取消"按钮。 3.提示消息对话(prompt)
提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个"确定"按钮和一个"取消"按钮。选择"确认"会响应对应的提示信息,选择"取消"会关闭对话框。
switch_to_alert() #定位弹出对话
text #获取对话框文本值
accept() #相当于点击"确认"
dismiss() #相当于点击"取消"
send_keys() # 输入值,这个alert和confirm没有输入对话框,所以这里就不能用了,所以这里只能使用在prompt这里。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import timedriver=webdriver.Chrome()
driver.get(“https://www.baidu.com/”)
driver.implicitly_wait(10)#隐式等待10秒mouse=driver.find_element_by_link_text(“设置”)
#鼠标移动到“设置”按钮
ActionChains(driver).move_to_element(mouse).perform()
driver.find_element_by_link_text(“搜索设置”).click() #点击“搜索设置”#强制等待4秒,注意:这里使用隐式等待或显示等待都将无法获取元素
time.sleep(4)#分两步,先定位下拉框,再点击选项
choice = driver.find_element_by_name("NR")
#choice.find_element_by_xpath('//*[@id="nr"]/option[3]').click()Select(choice).select_by_value("50")time.sleep(2)
#使用Select().select_by_index进行定位
案例:利用值定位 #使用Select().select_by_index进行定位#Select(choice).select_by_index(2) #Select(choice).select_by_value(“50”) Select(choice).select_by_text ("每页显示50条")
select里面方法除了上面介绍的三种,还有更多的功能如下:
select_by_index() :通过索引定位
select_by_value() :通过value值定位
select_by_visible_text() :通过文本值定位
deselect_all() :取消所有选项
deselect_by_index() :取消对应index选项
deselect_by_value() :取消对应value选项
deselect_by_visible_text() :取消对应文本选项
first_selected_option() :返回第一个选项
all_selected_options() :返回所有的选项