元素属性定位:id、name、class_name
元素标签定位:tag_name
超链接定位:link_text、paratial_link_text
元素路径定位:XPath
css选择器定位:CSS
1.如果一次性定位一组元素,用find_elements,使用find_element会报错
1.点击:click()
2.输入内容:send_keys()
3.清除:clear()
1.浏览器最大化:maximize_window()
2.设置浏览器窗口大小:set_window_size(weigth,height)
3.设置浏览器窗口位置:set_window_position(x,y)
4.浏览器后退:back()
5.浏览器前进:forword()
6.浏览器刷新:refresh()
7.关闭当前窗口:close() 关闭的一般是主窗口
8.关闭驱动对象:quit()
9.获取页面title:title 获取的一般是主页面
10.获取当前页面的url:current_url 获取的一般是主页面
不切换窗口时,7 9 10都是操作的主窗口
1.获取元素大小:size
2.获取元素文本:text
3.获取属性值:get_attribute("xxx") 传递的参数是元素的属性名 判断一组元素是否是我们想要的值
在特殊应用场景中使用:
4.判断元素是否可见:is_displayed() 例如:element.is_display()
5.判断元素是否可用:is_enabled() 是否可以点击
6.判断元素是否被选中:is_selected() 用来检查复选框或者单选框的按钮是否被选中
在selenium中将鼠标相关的操作封装在ActionChains,这些操作必须结合perform()执行
action = ActionChains(driver)
1.点击:click()
2.右击:context_click(element)
3.双击:double_click(element)
4.悬停:move_to_element(element)
5.拖拽:drag_and_drop(source,target)
6.执行:perform()
键盘相关操作:
selenium将键盘相关的操作都封装在Keys类中
1.删除键:send_keys(Keys.BACK_SPACE) BackSpace
2.空格键:send_keys(Keys.SPACE)
3.制表键:send_keys(Keys.TAB)
4.回退键(ESC):send_keys(Keys.ESCAPE)
5.回车键:send_keys(Keys.ENTER)
6.全选:send_keys(Keys.CONTROL,'a')
7.复制:send_keys(Keys.CONTROL,'c')
8.上传文件:send_keys(上传文件的路径)
1.为什么要设置元素等待?
由于电脑配置原因或者网络配速问题,在查找元素时未被第一时间加载出来,会抛出未找到该元素的异常
2.什么是元素等待?
元素在第一次未被找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素就会继续执行代码,否则抛出未找到元素异常
隐式等待方法:
driver.implicitly_wait(timeout)
1.隐式等待是全局设置,设置一次应用于全局
2.一般情况下是前置必写代码
selenium把显示等待的相关操作封装在WebDriverWait类中
WebDriverWait(driver,timeout,poll_frequency)
1.driver:浏览器驱动对象
2.timeout:超时的时长
3.poll_frequency:检测间隔的时间,默认是0.5s
element = WebDriverWait(driver,10,1).until(lambda x:x.find_element(By.ID,"ID"))
标签:
1.通过css定位(直接定位option)
2.通过使用select类来控制(控制父类)
select= Select(element)
select.by_index() 下标,从0开始
select.by_value() 根据value定位
select.by_visible_text(text) 根据文本定位
注意:
1.实例化select时,需要参数为select标签元素
2.调用select类下面的的方法,只通过索引、value属性值、显示文本去控制的,不需要click事件
1.alert:警告框
2.confirm:确认框
3.prompt:提示框
对弹出窗一定要进行处理接下来的代码才能够运行,否则接下来的代码不生效
如何处理对话框?
1.获取弹出窗对象:alert = driver.switch_to.alert
alert.text:返回alert/confirm/prompt中的文字信息
alert.accept():接收对话框选项
alert.dismiss():取消对话框选项
应用场景:页面注册同意条款,滚动条滚到最后才能点击同意
1.js = "windows.scrollTo(0,10000)" 先设置js控制滚动条语句 0:左边距;10000:上边距
2.driver.execute_script(js) 调用js执行代码
常见frame表单:frame、iframe两种
为什么要切换frame表单?
当同一个页面有很多表单时,浏览器无法主动从一个表单切换到另一个表单
如何切换frame表单?
1.driver.switch_to.frame(frame_reference)
frame_reference:可以为frame框架的name、id或者定位到的frame元素(iframe)
2.driver.switch_to.default_content() --->恢复默认页面的方法 因为切换语句只有在主目录才有用
注意:从一个子frame表单切换到另一个子frame表单时要先恢复到默认页面,否则报错
为什么要切换窗口?
selenium默认情况下只会在主窗口,如果不切换窗口,那么浏览器无法操作除了主窗口以外的窗口内的任何元素
如何切换窗口?
在selenium中封装了获取当前窗口的句柄、获取所有窗口的句柄和切换到指定窗口句柄的方法:
(句柄是窗口的唯一识别码)
1.driver.current_window_handle -->获取当前窗口的句柄
2.driver.window_handles -->获取所有窗口句柄
3.driver.switch_to.window(handle) -->切换到指定窗口句柄
窗口截图:
driver.get_screenshot_as_file(imgpath)
imgpath:图片保存的路径 ./pic.png :保存在当前目录下,且图片名称为pic.png
../image/pic1.png:保存在上级目录的image文件夹下,且图片名称是pic1.png
随机生成文件名:
driver.get_screenshot_as_file("../image/%s.png"%(time.strftime("%Y_%m_%d %H_%M_%s")))
strftime:将时间转换成字符串函数
应用场景:多条case测试失败,可以使用时间戳的形式进行截图
验证码:
防止恶意请求
注:selenium没有对验证码的处理方法
常见的验证码处理方式:
1.去掉验证码(测试环境采用)
2.设置万能的验证码(生产环境和测试环境)
3.验证码识别技术(通过py-tesseract来识别图片验证码;识别率很难)
4.记录cookie(通过记录cookie进行跳过登录)推荐使用
selenium操作cookie:
1.get_cookie(name) -->获取制定cookie name是cookie
2.get_cookies() -->获取本网站所有的本地cookies
3.add_cookie(cookie_dict) -->添加cookie
cookie_dict:一个字典对象,必选键包括:name、value