1、webdriver模块
1)在selenium中,无论是常用的Firefox Driver 还是Chrome Driver和Ie Drive,他们都继承至selenium\webdriver\remote下
webdriver.py中的WebDriver 类。
2)着重看下Remote下的WebDriver类中的方法:
一、全局操作类
start_session 使用指定的desired capabilities创建一个会话(session)
start_client 新建一个webdriver会话session前调用,可以自定义初始化的动作
stop_client 停止webdriver会话session后调用,可以自定义一些清理动作
create_web_element 创建一个html元素
get 在当前浏览器会话页打开指定的的url网页
close 关闭当前浏览器窗口
quit 关闭webdirver会话,并把所有与该会话关联的浏览器窗口一起关闭
forward/back 浏览器历史浏览上一次/下一次操作
refresh 刷新浏览器
set_script_timeout 设置脚本执行超时时间
set_page_load_timeout 设置页面加载超时时间
get_screenshot_as_file 截图并保存为文件
get_screenshot_as_png 截图并保存为png格式文件
get_screenshot_as_base64 截图成base64串
get_cookies/delete_all_cookies 获取/删除所有cookie
get_cookie/delete_cookie 获取/删除指定的cookie
二、元素定位类
find_element_by_id/find_elements_by_id 通过id查找一个或多个元素
find_element_by_xpath/find_elements_by_xpath 通过xpath查找一个或多个元素
find_element_by_link_text/find_elements_by_link_text 通过链接文本查找一个或多个元素(全匹配模式)
find_element_by_partial_link_text/find_elements_by_partial_link_text通过部分链接文本查找一个或多个元素(部分匹配模式)
find_element_by_name/find_elements_by_name 通过元素名查找一个或多个元素
find_element_by_tag_name/find_elements_by_tag_name 通过html标记名查找一个或多个元素
find_element_by_class_name/find_elements_by_class_name 通过class name查找一个或多个元素
find_element_by_css_selector/find_elements_by_css_selector 通过css选择器查找一个或多个元素
三、js执行类
execute_script 同步模式执行js(等待js的执行完成,才进入下一步)
execute_async_script 异步模式执行js(不需要等待js的执行结果,直接进行下一步)
四、窗口、元素操作类
current_window_handle 获取当前窗口的handle
handlewindow_handles 获取当前webdriver session所有窗口的
maximize_window 最大化窗口
set_window_size 设置窗口大小
get_window_size 获取窗口大小
set_window_position 设置窗口位置
get_window_position 获取窗口位置
switch_to_window 切换至指定窗口
switch_to_default_content 切换至默认的frame
switch_to_frame 切换至指定的frame
switch_to_alert 切换至标准的alert窗口
switch_to_active_element 切换至当前激活的元素
五、基本信息读取类
desired_capabilities 获取当前会话的desired_capabilities信息
current_url 获取当前页面的url
page_source 获取当前页面的源码
title 获取当前页面的标题
六、其他
implicitly_wait
get_screenshot_as_file,截图保存。参数-文件名,绝对路径
save_screenshot
get_screenshot_as_png
get_screenshot_as_base64
3)from selenium import webdriver
broeswerdriver = webdriver.Chrome() 实例化chrome的driver对象
selenium/webdriver/__init.py中导入from .chrome.webdriver import WebDriver as Chrome
2、WebElement模块
1)driver.find_element_by_id('username').clear()
2)常用方法
tag_name,获取当前元素的标签名
text,获取元素的文本
click,单击
submit,提交表单,一般是form表单
clear,清空
get_property(name)
get_attribute(name),获取元素的属性
is_selected,元素是否选中,返回布尔
is_enabled,元素是否可编辑,返回bool类型
send_keys,输入
is_displayed,元素是否可见,返回bool类型
location_once_scrolled_into_view
size,返回元素的尺寸
location,获取元素的位置,譬如 left = element.location['x'] top = element.location['y']
rect,获取一个包含当前元素大小和位置的字典
parent,获取当前元素的父节点
3、expected_conditions模块
1)引入模块:from selenium.webdriver.support import expected_conditions as EC
2)title_is 判断页面title是否一致,若一致则返回true,不一致则返回false。
示例:title = EC.title_is(u'路由心定 - 简书')
print title(browser)
3)title_contains 用与title_is差不多,只不过这个是只要包含指定字符就可以
4)presence_of_element_located,判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回元素
示例:elem = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "xpah路径")))
print elem
5)url_contains,判断页面地址是否包含指定字符
6)url_matches,判断页面地址是否匹配
7)url_to_be,判断页面地址是否完全一致
8)url_changes,判断页面地址是否不完全不一致
9)visibility_of_element_located,判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0
10)visibility_of,判断某个元素是否在页面中可见
11)presence_of_all_elements_located,判断是否至少有1个元素存在于dom树中,如果定位到就返回列表
12)visibility_of_any_elements_located,判断是否至少有一个元素在页面中可见,如果定位到就返回列表
13)visibility_of_all_elements_located,判断所有元素是否在页面中可见,如果定位到就返回列表,否则返回false
14)text_to_be_present_in_element,判断指定的元素中是否包含了预期的字符串,返回布尔值
15)text_to_be_present_in_element_value,判断指定元素的value属性值中是否包含了预期的字符串,返回布尔值(注意:只是value属性)
16)frame_to_be_available_and_switch_to_it,判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
17)invisibility_of_element_located,判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素
18)element_to_be_clickable,判断某个元素是否可见并且是可点击的,如果是的就返回这个元素,否则返回False
19)staleness_of,等待某个元素从dom树中移除
20)element_to_be_selected,判断某个元素是否被选中了,一般用在下拉列表
21)element_located_to_be_selected,判断某个元素对否被选中了
22)element_selection_state_to_be,判断某个元素的选中状态是否符合预期
23)element_located_selection_state_to_be,判断某个元素的选中状态是否符合预期
24)number_of_windows_to_be 判断窗口数量是否等于指定值
25)new_window_is_opened 判断新窗口是否打开
26)alert_is_present,判断页面上是否存在alert,如果有就切换到alert并返回alert的内容
4、select模块,用于处理标准select下拉框
1)引入模块:from selenium.webdriver.support.ui import Select
虽然Select类代码位于selenium/webdriver/support/select.py,但是由于ui.py文件中直接导入了Select,因此可以使用此引入方式
2)options,以列表形式返回下拉框的所有选项
3)all_selected_options,以列表形式返回下拉框所有被选中项
4)first_selected_option,返回下拉框被选中项的第一个
5)select_by_value,通过索引定位,索引值从0开始
6)select_by_index,通过value值定位
7)select_by_visible_text,通过文本值定位
示例:Select(driver.find_element_by_name("storeDeclare.cityLine")).select_by_visible_text("3线")
8)deselect_all,取消全部的已选择项
9)deselect_by_value,取消已选中的value值项
10)deselect_by_index,取消已选中的索引项
11)deselect_by_visible_text,取消已选中的文本值项
5、wait模块
1)引入模块:from selenium.webdriver.support.ui import WebDriverWait
虽然Select类代码位于selenium/webdriver/support/wait.py,但是由于ui.py文件中直接导入了WebDriverWait,因此可以使用此引入
方式。
2)util
2.1)示例:WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("某个按钮")).click() 在10秒内等待某个按钮被
定位到再去点击。就是每隔0.5秒内调用一下until里面的表达式或者方法函数,要么10秒内表达式执行成功,要么10秒后抛出超时异常。
2.2)结合expected_conditions模块使用:WebDriverWait(driver,10).until(EC.alert_is_present()).accept() 10秒钟等待浏览器弹
出的对话框,如果出现,就点击确定按钮
3)until_not,基本用法同util一致
5、EventFiringWebDriver模块,监听器
1)引入模块:from selenium.webdriver.support.events import EventFiringWebDriver
1.1)虽然Select类代码位于selenium/webdriver/support/event_firing_webdriver.py,但是由于ui.py文件中直接导入了
EventFiringWebDriver,因此可以使用此引入方式。
1.2)EventFiringWebDriver其实也是一个WebDriver。可以实现在使用WebDriver同样的操作。
1.3)使用EventFiringWebDriver的优势在于可以用监听器监听他的所有操作。
1.4)实例化方式
普通创建:WebDriver driver = new FirefoxDriver();
监听器创建:WebDriver driver = new EventFiringWebDriver(new FirefoxDriver()).register(new LogEventListener());
其中LogEventListener()是自定义的监听器,名字可以随意取,监听器需要继承WebEventListener接口,并实现接口中的方法
2)wrapped_driver
get(url)
back
forward
execute_script
execute_async_script
close
quit
find_element
find_elements
find_element_by_id
find_element_by_xpath
find_elements_by_xpath
find_element_by_link_text
find_elements_by_link_text
find_element_by_partial_link_text
find_elements_by_partial_link_text
find_element_by_name
find_elements_by_name
find_element_by_tag_name
find_elements_by_tag_name
find_element_by_class_name
find_elements_by_class_name
find_element_by_css_selector
find_elements_by_css_selector
6、Keys模块,主要是定义了一些特殊的按键
from selenium.webdriver.common.keys import Keys
elem.send_keys(Keys.RETURN)
elem.send_keys(Keys.CONTROL, 'a')
7、TouchActions 模拟移动端触摸操作
1)引入from selenium.webdriver.common.touch_actions import TouchActions
2)示例:Action = TouchActions(driver)
Action.flick_element(button, 0, 200, 50).perform()
3)常用方法
perform(),执行链中的所有动作
tap(元素),单击
double_tap(元素),双击
tap_and_hold(x坐标,y坐标),某点按住
move(x坐标,y坐标),移动到指定的位置
release(x坐标,y坐标),在某个位置松开操作
scroll(x轴偏移量, y轴偏移量),滚动到某个位置
scroll_from_element(操作元素定位, x轴偏移量, y轴偏移量),以元素为起点向下滑动,实现下拉操作。注意:向下滑动为负数,
向上滑动为正数。
long_press(元素),长按不释放
flick(xspeed, yspeed),轻弹,从屏幕上的任何位置开始
flick_element(操作元素定位, x轴偏移量, y轴偏移量, 速度),以元素为起点以一定速度向下滑动,实现下拉操作。注意:向上滑动
为负数,向下滑动为正数。
8、Alert模块,处理弹窗
1)弹窗种类:
1.1)警告消息框(alert):警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先
关闭该消息框然后才能继续进行操作。
1.2).确认消息框(confirm):确认消息框向用户提示一个"是与否"问题,用户可以根据选择"确定"按钮和"取消"按钮。
1.3).提示消息对话(prompt):提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个
"确定"按钮和一个"取消"按钮。选择"确认"会响应对应的提示信息,选择"取消"会关闭对话框。
2)引入:
alert = driver.switch_to_alert()
print (alert.text)
3)示例:
4)常用方法
switch_to_alert() #定位弹出对话
text #获取对话框文本值
dismiss #相当于点击"取消"
accept #相当于点击"确认"
send_keys # 输入值,这个alert和confirm没有输入对话框,所以这里就不能用了,所以这里只能使用在prompt这里。
9、ActionChains模块,模拟鼠标的行为
1)引入:from selenium.webdriver.common.action_chains import ActionChains
2)示例:
source = browser.find_element_by_css_selector('#draggable') # 被拖拽的对象
target = browser.find_element_by_css_selector('#droppable') # 目标对象
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()
3)常用方法
perform 执行链中的所有动作
reset_actions 释放所有操作
click 鼠标单击
click_and_hold 鼠标单击且按住不放
context_click 右击
double_click 双击
drag_and_drop(source, target) 拖拽
drag_and_drop_by_offset(source, xoffset, yoffset) 拖拽到指定位置
key_down 按住某个键,按下Ctrl+c键:ActionsChains(browser).key_down(Keys.CONTROL).send_keys('c').perform()
key_up 松开某个键,实现按下Ctrl+c并且释放: ActionsChains(browser).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
move_by_offset(xoffset, yoffset) 指定鼠标移动到某一个位置
move_to_element(to_element) 移动鼠标到某个元素位置的偏移位置
move_to_element_with_offset
pause 等待
release 释放按下的鼠标
send_keys(*keys_to_send) 向某个元素位置输入值
send_keys_to_element(element, *keys_to_send) 向指定的元素输入数据