一、selenium八大定位方法
find_element_by_id('kw')
find_element_by_name('wd')
find_element_by_class_name('s_ipt')
find_element_by_tag_name('input')
find_element_by_link_text('新闻')
find_element_by_partial_link_text('部分文字')
xpath定位:
1、绝对路径定位
find_element_by_xpath('/html/body/div/span/input')
2、利用元素属性定位
find_element_by_xpath('//input[@id="kw"]')
find_element_by_xpath("//*[@name='wd']")
find_element_by_xpath("//*[@class='s_ipt']")
find_element_by_xpath("//input[@type='submit']")
find_element_by_xpath(//input[@autocomplete='off'])
3、层级与属性相结合,先找到父级
find_element_by_xpath("//span[@class='bg_s_ipt_wr']/input")
4、使用逻辑运算符
find_element_by_xpath("//input[@id='kw' and @class='s_ipt']")
5、使用contains方法,contains方法用于匹配一个属性中包含的字符串
find_element_by_xpath("//span[contains(@class,'s_ipt_wr')]/input")
6、使用text()方法
find_element_by_xpath("//a[text(),'新闻']")
find_element_by_xpath("//a[contains(text(),'部分文字')]")
CSS定位:
语法:.class\#id\*\element
1、通过class定位
find_element_by_css_selector(".s_ipt") .代表使用class定位
2、通过id定位
find_element_by_css_selector("#kw")
4、通过标签名定位
find_element_by_css_selector('input')
5、通过标签层级关系定位
find_element_by_css_selector('span>input')
6、通过属性定位
find_element_by_css_selector("[name='kw']")
find_element_by_css_selector("[type='submit']")
7、通过如上的方式组合定位
find_element_by_css_selector("form.fm>span>input.s_ipt")
二、WebDriver提供的方法
1、控制浏览器窗口的大小
driver.set_window_size(480,800)
2、控制浏览器的前进、后退
driver.back()
driver.forward()
3、模拟浏览器的刷新
driver.refresh()
4、对元素操作常用的方法
clear()清除文本
send_keys()模拟按键输入
click()单击元素
submit():提交表单
size:返回元素的尺寸 driver.find_element_by_id('id').size
text:获取元素的文本 driver.find_element_by_id('id').text
get_attribute(name):获得元素的属性值 attribute = driver.find_element_by_id('id').get_attribute('type')
is_displayed():设置元素是否用户可见
5、鼠标操作:在webdriver中都封装在ActionChains类中
ActionChains类提供了鼠标常用的方法:
perform():执行ActionChains类中存储的所有行为
context_click():右击
double_click():双击
drag_and_drop():拖动
move_to_element():鼠标悬停
例:above = driver.find_element_by_link_text('设置')
ActionChains(driver).move_to_element(above).perform()
6、键盘操作
from selenium.webdriver.common.keys import Keys
# 在输入框中输入内容
driver.find_element_by_id('kw').send_keys('selenium')
# 删除多输入的一个m
driver.find_element_by_id('kw').send_keys(Keys.SPACE)
# 输入组合键Ctrl+a ,全选输入框内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
# 输入组合键Ctrl+x ,全选输入框内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'x')
# 输入组合键Ctrl+v ,全选输入框内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v')
# 输入回车键
driver.find_element_by_id('kw').send_keys(Keys.ENTER)
7、获取验证信息
title:用于获取当前页面的标题
current_utl:用于获取当前页面的URL
text:用于获取当前页面的文本信息
8、元素等待
显示等待:WebDriver等待某个条件成立则继续执行,否则在达到最大时长时抛出超时异常
element = WebDriverWait(driver,5,0.5).until(expected_conditions.visibility_of_element_located(By.ID, "kw"))
隐式等待:WebDriver提供的implicitly_wait()方法可用来实现隐式等待
9、定位一组元素
find_elements_by_id('kw')
find_elements_by_name('wd')
find_elements_by_class_name('s_ipt')
find_elements_by_tag_name('input')
find_elements_by_link_text('新闻')
find_elements_by_partial_link_text('部分文字')
find_elements_by_xpath()
find_elements_by_css_selector()
10、多表单切换
switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面
11、多窗口切换
current_window_handle:获取当前窗口句柄
window_handles:返回所有窗口的句柄到当前会话
switch_to.window(): 切换到相应的窗口
12、警告框处理
首先使用switch_to.alert()方法定位,然后再使用如下方法进行操作
text:返回alert、confirm、prompt中的文字信息
accept():接受现在警告框
dismiss():解散现在警告框
send_keys():在警告框中输入文本
alert = driver.switch_to.alert
alert_text = alert.text
alert.accept()
13、下拉框处理,Select类处理下拉框
Select类:用于定位<select>标签
select_by_value():通过value值定位下拉选项
select_by_visible_text():通过text值定位下拉选项
select_by_index():根据下拉选项的索引进行选择
14、文件的上传和下载
15、操作Cookie
get_cookies():获得所有Cookie
get_cookie(name):返回字典key为"name"的Cookie
add_cookie(cookie_dict):添加Cookie
delete_cookie(name, optionsString):删除名为OpenString的Cookie
delete_all_cookies():删除所有Cookie
16、操作JavaScript
ele = driver.find_element_by_class_name('login_bnt')
driver.execute_script("$(arguments[0]).click()", ele)
17、处理HTML5视频播放
JavaScript有个内置的对象叫作arguments。arguments包含了函数调用的参数数组,【0】表示取对象的第一个值
video = driver.find_element_by_id('preview-player_html5_api')
# 返回播放文件地址
url = driver.execute_script("return arguments[0].currentSrc;", video)
# 播放视频
driver.execute_script("arguments[0].play()", video)
# 暂停视频
driver.execute_script("arguments[0].pause()", video)
18、滑块处理
click_and_hold():单击并按下鼠标左键
move_by_offset():移动鼠标,第一个参数为x坐标距离,第二个参数为y坐标距离
reset_action():重置action
例:
# 定位滑动块
slider = driver.find_elements_by_class_name("slide-to-unlock-handle")[0]
action = ActionChains(driver)
action.click_and_hold(slider).perform()
for index in range(200):
try:
action.move_by_offset(2,0).perform()
except UnexpectedAlertPresentException:
break
action.reset_action()