Python自动化测试工具----Selenium的使用

一、selenium元素操作

  1. element.send_keys(“内容”) # 输入方法
    注:上传文件,使用 send_keys(“文件路径及文件名”)
    如:driver.find_element_by_css_selector("[name=‘up’]").send_keys(“D:\hello123.txt”)
  2. element.click() # 点击方法
  3. element.clear() # 清空
    注:在输入方法之前一定要清空操作。

注:element表示为selenium元素,下同。

二、浏览器常用操作API

  1. 最大化浏览器:
    driver.maximize_window() #一般为前置代码
  2. 设置浏览器大小 单位像素
    driver.set_window_size(w, h)
  3. 设置浏览器位置
    driver.set_window_position(x, y)
  4. 后退操作
    driver.back()
  5. 前进操作
    driver.forward()
  6. 刷新操作
    driver.refresh()
  7. 关闭当前主窗口(主窗口:默认启动哪个界面,就是主窗口)
    driver.close()
  8. 关闭由driver对象启动的所有窗口
    driver.quit()
  9. 获取当前页面title信息
    driver.title
  10. 获取当前页面url信息
    drive.current_url

注:driver.title 和 driver.current_url 没有括号,应用场景:一般为判断上步操作是否执行成功。

三、浏览器元素信息操作API

  1. 获取元素文本
    element.text
  2. 获取元素大小
    element.size
  3. 获取元素属性值
    element.get_attribute()
    如:获取链接地址 driver.find_element_by_css_selector("[name=‘up’]").get_attribute(“href”)
  4. 判断元素是否可见
    element.is_displayed()
  5. 判断元素是否可用
    element.is_enabled()
  6. 判断元素是否被选中
    element.is_selected()
  7. 返回元素的tagName
    element.tag_name
  8. 获取元素坐标
    element.location

四、 鼠标操作

(一)、导包

包:from selenium.webdriver.common.action_chains import ActionChains
注:可通过ActionChains类—>快速导包

(二)、鼠标事件常用的操作方法
  1. 执行鼠标事件方法
    perform()

  2. 右击
    context_click(element)
    应用:context_click(element).perform()
    注:selenium框架中虽然提供了右击鼠标方法,但是没有提供选择右击菜单方法,可以通过发送快捷键的方式解决(谷歌浏览器不支持)。

  3. 双击
    double_click(element)
    应用:double_click(element).perform()

  4. 拖拽
    drag_and_drop(element)
    应用:drag_and_drop(source, target).perform()

  5. 悬停
    move_to_element(element)
    应用: move_to_element(element).perform()

注:为方便后续使用,实例化ActionChains类时最好实名使用。
匿名:ActionChains(driver).context_click(element).perform()
实名:action = ActionChains(driver)

# 实例化并获取 ActionChains类
action = ActionChains(driver)
# 调用右击方法  类.方法名()
ActionChains(driver).context_click(username).perform()

五、键盘操作

(一)、导包

包:from selenium.webdriver.common.keys import Keys
注:可通过Key类—>快速导包

(二)、常用的快捷键

单键: element.send_keys(Keys.XXX)

element.send_keys(Keys.ENTER) # 按下回车键
element.send_keys(Keys.TAB) # 按下Tab制表键
element.send_keys(Keys.SPACE) # 按下空格键space
element.send_keys(Kyes.ESCAPE) # 按下回退键Esc
element.send_keys(Keys.BACK_SPACE) # 按下删除键BackSpace,一次删除一个字母或文字  
element.send_keys(Keys.SHIFT) # 按下shift键
element.send_keys(Keys.CONTROL) # 按下Ctrl键
element.send_keys(Keys.ARROW_DOWN) # 按下鼠标光标向下按键
CONTROL:Ctrl键

组合键:element.send_keys(Keys.XXX, ‘a’)

element.send_keys(Keys.CONTROL,'a') # 组合键全选Ctrl+A
element.send_keys(Keys.CONTROL,'c') # 组合键复制Ctrl+C
element.send_keys(Keys.CONTROL,'x') # 组合键剪切Ctrl+X
element.send_keys(Keys.CONTROL,'v') # 组合键粘贴Ctrl+V

六、元素等待

(一)、什么是元素等待

元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找到元素,抛出未找到元素异常。

(二)、元素等待分类
  1. 隐式等待
  2. 显式等待
(三)、隐式等待
  • 方法
    driver.implicitly_wait(30)
    一般情况下设置30秒

  • 特点

  1. 针对所有元素生效。
  2. 一般情况下为前置必写代码。


前置代码一般有:
1.获取浏览器驱动对象;
2. 最大化浏览器;
3. 设置隐式等待

(四)、显示等待
  1. 导包: from selenium.webdriver.support.wait import WebDriverWait
    注:可通过WebDriverWait类—>快速导包

  2. 实例化WebDriverWait类并调用until(method)方法
    method:匿名函数

WebDriverWait(driver,timeout=10,poll_frequency=0.5).
until(lambda x:x.find_element_by_id("#user")).send_keys("admin")

# 参数:
#	timeout:   超时时间
#	poll_frequency:  访问频率,默认0.5秒找一次元素
#	x: x为driver,它是WebDriverWait类将传入的driver赋值给self._driver,until方法调用了self._driver 
  1. 特点
    只针对一个元素有效。

七、下拉框 类包

(一)为什么单独使用下拉框?

如果option选项没有value值的化,css定位或其他定位就不太方便。

(二)如何使用Select类
  1. 导包
    from selenium.webdriver.support.select improt Select
  2. 实例化:s = Select(element)
  3. 调用方法:s.select_by_index()
(三)调用方法
  1. 通过下标定位
    s.select_by_index()
  2. 通过value值定位
    s.select_by_value()
  3. 通过文本定位
    s. select_by_visible_text()
(四)注意事项
  1. 实例化select时,需要的参数为 select标签元素。
  2. 调用Select类下面的方法,是通过索引、value属性值、显示文本去控制,而不需要click事件。

八、对话框

(一)类型
  1. alert # 警告框
  2. confirm # 确认框
  3. prompt # 提示框

注:以上三种对话框,处理方法都一样。

(二)处理方法
  1. 切换到对话框
    driver.switch_to.alert
  2. 处理对话框
    alert.text 获取文本
    alert.accept() 同意
    alert.dismiss() 取消
    注:以上三种对话框,处理方法都一样。

九、滚动条 scrollTo

在selenium中没有直接提供定位滚动条组件方法,但是它提供了执行js语句方法,可以通过js语句来控制滚动条操作。
方法:

  1. 设置操作滚动条操作语句
  2. 调用执行js方法,将设置js语句传入方法中
#示例:
js = "window.scrollTo(0,10000)"
		#0: 左边距 -->水平滚动条
		#10000:上边距 -->垂直滚动条
driver.execute_script(js) # 调用

十、切换frame表单

(一)作用

当前主目录内没有iframe表单页面元素信息,不切换,找不到元素。常用的frame表单有两种:frame、iframe。

(二)切换frame
driver.switch_to.frame() # 切换frame
driver.switch_to.frame("id\name\element")
#切换frame时,可以使用name、id、iframe元素	
(三)回到主目录
driver.switch_to.default_content()

十一、多窗口切换

(一)作用
页面存在多个窗口式,seleniu默认焦点只会在主窗口上所有的元素,不切换切换窗口,无法操作除主窗口以外的窗口内元素。
(二)切换思路及步骤

思路:获取要切换的窗口句柄,调用切换方法进行切换。
步骤:

  1. 获取当前窗口句柄
  2. 点击链接 启动另一个窗口
  3. 获取当前所有窗口句柄
  4. 遍历所有窗口句柄
  5. 判断当前遍历的窗口句柄不等于当前窗口句柄
  6. 切换窗口操作
(三)方法
  1. 获取当前主窗口句柄
 	driver.current_window_handle 
  1. 获取当前由driver启动所有窗口句柄
driver.window_handles 
  1. 切换窗口
driver.switch_to.window(handle)  

十二、截屏

(一)应用场景

失败截图,让错误看的更直观

(二)方法
driver.get_screenshot_as_file(imgepath)
# imagepath:为图片要保存的目录地址及文件名称,如: 当前目录 ./test.png、上一级目录 ../test.png。
(三)扩展

多条用例执行失败,会产生多张图片,可以采用时间戳的形式,进去区分。
操作:

driver.get_screenshot_as_file("../image/%s.png"% (time.strftime("%Y_%m_%d %H_%M_%S")))
	# strftime:将时间转为字符串函数
	# %Y_%m_%d %H_%M_%S:代表,年 月 日 时 分 秒
driver.get_screenshot_as_file("../image/{}.png" . format(time.strftime("%Y_%m_%d %H_%M_%S")))

十三、验证码

(一)验证码处理方式
  1. 去掉验证码(项目在测试环境、公司自己的项目)
  2. 设置万能验证码(测试环境或线上环境,公司自己项目)
  3. 使用验证码识别技术 (由于现在的验证码千奇百怪,导致识别率太低)
  4. 使用cookie解决(推荐)

十四、cookie

方法:
01. 获取所有的cookie

driver.get_cookies() 
02. 设置cookie
driver.add_cookies({字典})  

注意: 必须进行刷新操作。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值