Selenium的基本使用

1.web自动测试工具-Selenium

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8lPqdrfQ-1673076353851)(D:\test_product\ui_auto\README.assets\image-20220105191213298.png)]

  • 组成

    1. selenium  ide 录制脚本
    2. selenium  grid 大量的脚本, 分布式执行
    3. selenium  webdriver  核心, 模拟浏览器手工的操作
    
    -------
    selenium 4
    selenium 3(为主)
    
  • Selenium(需要操作)

    pip install selenium==3.141.0  # 安装版本
    
    pip install selenium   # 默认安装 4
    
    
    https://pypi.org/
    ---- 
    查看 是否安装
    pip list 
    pip show selenium
    
  • 浏览器及其驱动

    selenium 操作的是浏览器,想要使用 selenium 去操作浏览器,还需要 安装浏览器对应的驱动才可以.
    每个浏览器都有自己对应的驱动程序.
    
    • 谷歌浏览器

      谷歌浏览器的版本和驱动要进行对应(大版本对应即可)
      
      1. 确认浏览器的版本

      2. 下载对应版本的驱动

         https://npm.taobao.org/mirrors/chromedriver/
        
      3. 将驱动进行解压并将其添加到 path 环境变量中

         简单的方式: 将 解压之后的驱动 放到 Python 所在的安装目录中(本质添加到 path 环境变量中)
        ------------------------
         将 驱动放在代码目录中,在代码中指定驱动的路径
        

元素定位

1. 常用方法
方法名说明
ID定位driver.find_element(By.ID,"id属性值“)使用 标签的ID 属性来定位页面标签.
Name定位driver.find_element(By.NAME,"name属性值“)使用标签的 name 属性 来定位.
Class_Name定位driver.find_element(By.CLASS_NAME,"name属性值“)使用 标签的 class(类) 属性 来定位元素.
Tag_name定位driver.find_element(By.TAG_NAME,"标签名")使用标签的 名字来定位.
link_text定位driver.find_element(By.LINK_TEXT,"a标签的全部文本内容")1. 只能用于 超链接标签(a 标签)
2. 根据 a 标签的全部文本内容来定位的(标签中 包含的内容)
partial_link_text定位driver.find_element(By.By.PARTIAL_LINK_TEXT,"a标签的全部文本内容")1. 只能用于 超链接标签(a 标签)
2. 根据 a 标签的部分文本内容来定位的(标签中 包含的内容)
定义一组数据driver.find_elementS(By.By.xxx,“xxx”)得到的是列表, 即使没有找到元素, 返回的也是 空列表.
可以使用 索引(下标) 来获取指定位置的元素
2. XPATH定位
方法使用
路径定位
属性定位'//*[@属性名=“属性值”]'
属性和逻辑定位'//*[@属性名="属性值" and @属性名=”属性值"]'
文本1. 完整的文本内容:'//*[text()="文本内容"]' 2. 使用部分本内容 '//*[contains(text(),"部分文本内容")]'3. 3.使用部分属性值 //*[contains(@属性名,'部分属性值')]
3.CSS定位
使用说明
ID选择器#id属性值使用标签的 ID 属性来定位
类选择器.类属性值使用标签的 class 属性 来定位
元素(标签)选择器标签名使用标签的名字 来定位
属性选择器[属性值="属性名"]使用标签的任意属性 来定位
层级选择器1. 父子关系:选择器1> 选择器2 2. 后代:选择器1 选择器2
局部属性选择器[属性名*="部分属性值"]等价于XPATH中//*[contains(@属性名, "部分属性值")]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHKCdRD7-1673076353852)(D:\test_product\ui_auto\README.assets\image-20230105235549033.png)]

常用界面交互操作

元素操作
1. 元素点击
element.click()
2. 输入
element.send_keys(内容)
3. 清除
element.clear()
元素信息获取
大小/文本/属性
1.获取元素大小
element.size
2.获取元素文本
element.text
3.获取元素属性值
4.element.get_attribute('属性名')
判断元素是否可见
element.is_displayed()
可见 : True
不可见: False
判断元素是否可用
简单的理解,可以认为是是否可以点击
element.is_enabled()

可用: True
不可用: False
判断元素是否被选中
element.is_selected()
选中: True
未选中: False
浏览器常见操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p4yTxFjg-1673076353854)(D:\test_product\ui_auto\README.assets\image-20230106001920941.png)]

关闭窗口/关闭浏览器
1. 关闭当前窗口
driver.close()   关闭当前窗口
2. 关闭浏览器
driver.quit()    不管有多少个打开的窗口,都会直接关闭退出
获取标题/url
作为页面断言的内容使用
1. 标题
driver.title

2. URL
driver.current_url
使用 selenium 操作,打开超链接,如果在新窗口打开, 在我们看来,页面进行了切换,但是对于浏览器来说,是没有切换的,还在原来的页面.
页面交互操作
下拉框
如果是select下拉框,可使用
1. 创建select对象
对象= Select(元素对象)
2. 通过对象选择下拉框中的内容即可
	- 对象.select_by_index(index) 根据索引选择,从0开始
	- 对象.select_by_value(index) 根据value属性值选择
	— 对象.select_by_visible_text(text) 根据文本内容选择
弹出框
  1. 弹出框分为自定义弹出框 和 JS 弹出

  2. 区分方式: 根据是否可以右键检查元素来区分, 如果可以检查元素, 就是自定义弹出框, 如果不能检查元素,就是 JS 弹出框

  3. 自定义弹出框的处理方式: 直接元素定位解决

  4. JS 弹出框的处理(alert(警告框)、confirm(确认框)、 prompt(提示框)), 这三种 JS 弹出框的处理方案是一样的.

    1. 获取弹出框对象
    对象 = driver.switch_to.alert
    2. 对弹出框进行处理
    	- 确认:对象.accept()
    	- 取消:对象.dismiss()
    	- 其他他操作: 获取弹出框的内容  对象.text
    -	prompt 提示框,输入内容,使用的也是 send_keys(), 页面中可能不显示的,但是输入成功的
    
滚动条
1. selenium 没有提供 直接操作滚动条的方法
2. JS(javascript) 是可以 操作滚动条
	js = "window.scrollTo(x,y)"
3. selenium 提供的操作 JS 代码的方法
	driver.execute_script(js)
页面元素特殊操作
鼠标操作
1. 实例化鼠标对象
mouse = ActionChains(driver)
2. 书写要进行的鼠标操作
mouse.操作()
-	move_to_element(元素对象)  鼠标悬停
-	context_click(元素对象)   鼠标右击
-	double_click(元素对象)    鼠标双击(选中)
-   drag_and_drop(开始, 结束)   拖拽
3. 执行鼠标动作(必须有执行)
mouse.perform()

其他重要API

元素等待
隐形等待
driver.implicitly_wait(最大等待时间)  # 单位 秒

1. 定位元素时,如果找到,不触发等待,直接使用
2. 如果没有找到, 间隔一段时间后, 再次定位
3. 达到最大时间,还没找到, 抛出异常 NoSuchElementException
4. 针对所有元素
显示等待
WebDriverWait(driver, 最大等待时间, 间隔时间).until(lambda x: x.find_element(By.xxx, 'xx'))

1. 定位元素时,如果找到,不触发等待,直接使用
2. 如果没有找到, 间隔一段时间后, 再次定位
3. 达到最大时间,还没找到, 抛出异常 TimeoutException
4. 针对单个元素

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uMaPNyQA-1673076353856)(D:\test_product\ui_auto\README.assets\image-20220624110005247.png)]

强制等待

time.sleep()

frame切换
1. frame 是前端的一种技术框架, 是用来在一个 HTML 页面中,嵌套另一个 HTML 页面的
2. 特点: 如果页面存在 frame,则元素定位的时候, 默认不能定位到 frame 嵌套的页面中(frame 切换)
3. 前端 frame 的实现有两种, frameset , iframe

方法

1. 切换到指定的 frame 页面
driver.switch_to.frame(frame_reference)
- frame_reference: frame 元素对象; ID属性,name 属性,索引
2. 切换到默认的页面
driver.switch_to.default_content()
窗口切换
在浏览器 中通过 selenium 新打开一个窗口,在代码 不会进行切换,即不能操作新打开的窗口页面. 想要操作必须进行窗口切换.

1. 每个窗口都有一个唯一的识别码,称为窗口句柄 handle
2. 获取所有的窗口句柄 
	driver.window_handles   # 得到是的列表, 新打开的窗口句柄会在列表的尾部
3. 切换到指定的窗口
	driver.switch_to.window(窗口句柄)

切换到新打开的窗口
driver.switch_to.window(driver.window_handles[-1])
窗口截图
driver.get_screenshot_as_file(图片的路径)
1. 图片的格式 使用 png
2. 如果路径包含目录,目录必须存在
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值