一、介绍
1.0是通过js注入的方式,缺点是速度不理想,稳定性依赖selenium内核对API翻译成Javascript质量高低
2.0是通过与浏览器通讯方式,webdriver通过原生浏览器或浏览器扩展直接控制浏览器,而且是针对各个浏览器而开发,取代了嵌入到被测web应用中的JavaScript优势:运行稳定、速度快,独立API易学、易维护、扩展性强
API文档:https://seleniumhq.github.io/selenium/docs/api/py/api.html
工作原理:
二、Webdriver
1.Driver继承关系
2.Driver常用方法-浏览器相关操作:
4个导航:get、back、forward、refresh
3个get:title、current_url、page_source
2个关闭:close、quit
1组管理窗口方法:maximize_window、get_window_size、set_window_size
1组截图方法:get_screenshot_as_file(获取当前浏览器页面的截图,出现IOError时返回False,成功返回True)、get_screenshot_as_base64(保存是base64的编码格式,一般在html页面会用到)、get_screenshot_as_png
3.查询元素driver.findElement(By):通过id、name、class name、xpath、css、link_text、Partial link text、tag name、组合查找(如:driver.find_element_by(id,"search-form").find_element_by(tag_name,'button')注意:里面不要跟xpath)
4.复合元素及多元素定位:driver.findElements(By)返回的是集合
5.基本控件的调用方法:
input输入框:sendkey、clear
超链接:click、获取属性
select下拉菜单:selectByValue(是option参数的value属性)、selectByIndex、selectByVisbleText
单选radiobox:click、isSelected
多选checkbox:click、isSelected
button:click、isEnabled
6.获取对象属性或文本值:getAttribute()、getText()
7.事件操作:Actions类,其位置是selenium.webdriver.common.action_chains,主要作用是定义了一些模拟用户鼠标,键盘操作,一般是要触发一些js函数或者js事件时用到这个类
ActionChains(driver) 后面跟动作函数如click(e)最后加回放perform()
a. 常用函数-鼠标操作包含:click、move_to_element、double_click(左键双击)、click_and_hold(左键按下操作)、context_click(右键单击)、drag_and_hold(元素拖拽)、release(在某个元素松开鼠标)
b.键盘操作:selenium.webdriver.common.keys 方法:send_keys发送到当前焦点元素
send_keys_to_element(element)发送某个键到指定元素上
c.跳转driver.switchTo():
switch_to_alert(windows弹窗一些操作):Alert对象(accept()、dissmiss()、getText()、sendKeys)
d.switch_to_frame(页面嵌套):
(1).三种定位方式: id或name、或者能通过页面知道是第几个、xpath
(2).两种回退方法:switch_to_parent_frame()、switch_to_default_content()切换到最顶层位置;注意:如果元素无法操作,请检查是否在frame中
switch_to_window(window_name这里面的name不是窗口标题,是一个字符串):通常用获取句柄方式来切换窗口/页面的场景,获取句柄方法:current_window_handle、window_handles或者用常用方法封装,跳转到最新打开的窗口
e.cookie类:首先先创建cookie,如{"name":"xxx","value":"yy"},用到driver.add_cookie(cookie),设置cookie所属的域,添加后刷新页面
f.执行JS:页面下滑到底部execute_script(window.scrollTo(0,3000));移除input属性execute_script(document.getElementById(\"text\").readOnly=false);显示:execute_script(document.getElementById(\"img_good\").style.display=\"block\")
g.截图:封装成函数,以时间戳存储
h.页面等待:
(1)等待固定时长:time.sleep()
(2)隐式等待方式:在查找元素时的最大等待时间driver.implicity_wait(5)
(3)智能等待:selenium.webdriver.support.wait 的WebDriverWait(driver,最长等待时长,轮询间隔).until(结束条件:匿名函数写法/自定义函数规则/expected_conditions(注意:位置在selen.webdriver.support)),其应用场景:1.加载慢的元素(订单号)2.等待元素可操作后,点击(阅统读同意协议),版本升级、好评、广告弹层处理等
I.文件上传:上传的本质是input对象,可以直接输入文件路径,从而绕过点击后弹出的windows控件
j.文件下载: 下载是通过设置浏览器属性,关闭下载提示框,设置默认下载保存路径FirefoxProfile().setPrefrence,有四种方式:browser.download.dir
、browser.download.folderList(0是桌面,1是"我的下载",2是自定义)、browser.download。manager.showWhenStarting、browser.helperApps.neverAsk.saveToDisk