嘘~ 正在从服务器偷取页面 . . .

pythonui自动化


一、介绍及用处

Selenium是一个开源的Web UI自动化测试工具,可以用于测试浏览器和移动设备,它支持多种编程语言,和页面爬虫差不多,页面爬虫主要是获取页面元素,自动化主要是对页面元素模拟点击输入等操作,所以说学会ui自动化后学爬虫就非常简单了。
优点:ui自动化方便项目的回归测试,也可以对经常重复性的操作进行自动化,省去枯燥无谓的操作。
缺点:就是维护成本高,UI自动化搞不好会适得其反,浪费了大量的时间和资源去排查环境的问题。

二、环境安装

  1. 首先下载python,进行安装。
  2. 选择自己的编译器,这里使用pycharm,选择点击下载,选择左边免费版下载就行,然后进行安装。
  3. win + R键输入cmd,在命令窗口输入python,出现版本号,配置成功。
    cmd
  4. (这一步可操作可不操作)改成中文,打开pycharm,选择Plugins,在输入框里输入Chinese,点击下载即可
    中文
  5. 点击New Project,点击ok
  6. 找到 file(文件)——settings(设置)——Project(项目)——Python interpreter(Python解释器)——Add interpreter(添加解释器)——System interpret(系统解释器)路径找到自己安装的Python.exe目录,默认目录(C:\Users\用户名称\AppData\Local\Programs\Python\Python版本号),选择python.exe,点击OK,点击Apply(应用)即可。
  7. 下载webdriver,和自己Chrome(谷歌)浏览器版本对应的驱动,如果没有那就下载包含版本数字最多的,其他浏览器也是一样的操作。
  8. 下载后配置环境变量,添加到系统环境变量path中,值为你存放的目录,接下来cmd输入:webdriver,回车,跳出浏览器即可。(还有一种简单方法,直接把webdriver放入python.exe的目录,此方法不用在cmd中验证)
  9. 在pycharm中找到 file(文件)——settings(设置)——Project(项目)——Python interpreter(Python解释器)——“+”号,点击后输入selenium,点击install(下载)即可。
  10. 删除新建项目main中的内容输入
    # 导入webdriver
    from selenium import webdriver
    # 导入时间
    import time
    # 实例化
    driver = webdriver.Chrome()
    # 打开百度网页
    driver.get("https://www.baidu.com/")
    # 等待三秒
    time.sleep(3)
    # 关闭浏览器
    driver.quit()
  11. 鼠标右键,选择run.main,即可自动打开浏览器,进入百度页面,然后关闭。

三、定位元素及操作

3.1定位元素

我们主要用到id,name,xpath,link_text进行定位。webdrive有八个定位元素操作:

名称 方式 解释
id find_element_by_id(x) id必须唯一,通过id进行定位
name find_element_by_name(x) 如果没有id,可以通过name进行定位,name必须唯一
xpath find_element_by_xpath(x) 层级进行定位
link_tex find_element_by_link_text(x) 文本进行定位
partial_link_text find_element_by_partial_link_text(x) 模糊定位
tag_name find_element_by_tag_name(x) 标签名字定位
class_name find_element_by_class_name(x) 类名定位
css_selector find_element_by_css_selector(x) css定位

怎么通过对应的方法找元素,百度即可,要写太多了,我懒。

3.2鼠标键盘操作

如果以下操作输入后没有提示的则需要前面导入键盘鼠标操作ActionChains(from selenium.webdriver.common.action_chains import ActionChains)

  1. 点击元素:driver.find_element_by_id(“someid”).click()
    这个方法可以点击传入的元素。
  2. 在元素上双击:driver.find_element_by_id(“someid”).double_click()
    这个方法可以在传入的元素上双击。
  3. 右键点击元素:driver.find_element_by_id(“someid”).context_click()
    这个方法可以在元素上右键点击。
  4. 模拟按键:driver.find_element_by_id(“someid”).send_keys(“some text”)
    这个方法可以模拟按键输入文本,可以传入字符串、键盘按键代码、上传文件等。
  5. 清除输入框内容:driver.find_element_by_id(“someid”).clear()
    这个方法可以清除输入框中已有的内容。
  6. 模拟按下某个键:driver.find_element_by_id(“someid”).send_keys(Keys.SPACE)
    Keys是一个包含各种键盘按键的常量类,模拟按下某个键。
  7. 鼠标悬停:driver.find_element_by_id(“someid”).move_to_element()
    这个方法可以模拟鼠标悬停到某个元素上。
  8. 拖动元素:driver.find_element_by_id(“someid”).drag_and_drop_by_offset(x, y)
    这个方法可以拖动某个元素到指定的x和y偏移位置。
  9. 鼠标滚轮:driver.execute_script(“window.scrollTo(0, 1000);”)
    这个方法可以来模拟鼠标滚轮操作,滚动到指定位置。

3.3浏览器操作

以下是基本操作,其它操作可以进行百度

  1. 弹出框处理
    可以使用switch_to.alert来处理弹出框,并使用text、accept()、dismiss()等方法操作弹出框。
  2. 窗口切换
    可以使用switch_to.window来切换窗口,以进行跨窗口测试。
  3. 截图
    可以使用get_screenshot_as_png()来截取当前网页屏幕截图。
  4. 前进/后退
    可以使用forward()和back()方法在网页间前进和后退。
  5. 窗口最大化
    可以使用maximize_window()方法。
  6. 关闭浏览器
    通过quit.()方法关闭浏览器

四、代码示例

# 导入selenium
from selenium import webdriver
# Selenium中的一个工具类,它包含了许多查找元素的方法。
from selenium.webdriver.common.by import By
# 实例化
driver=webdriver.Chrome()
# 打开百度
driver.get('http://www.baidu.com')
# 窗口最大化
driver.maximize_window()
# 输入selenium
driver.find_element(By.ID,'kw').send_keys('selenium')
# 点击搜索
driver.find_element(By.ID,'su').click()
# 关闭浏览器
driver.quit()

五、定位不到元素踩坑

  1. 首先确定元素的正确性,没问题,换种定位方法
  2. 页面加载慢,元素没有加载出来,需要在前面加上强制等待time.sleep(秒数)
  3. 看看是否有ifrome嵌套页面需要进入嵌套页面:
    driver.switch_to.frame(0) 通过索引进入(可能有多个嵌套网页)
  4. 是否为select查询,通过select查询方法:select_by_index()
  5. 是否为alert弹窗
  6. 是否为动态元素,在父元素定位后再找子元素。
  7. 定位下一级时,上一级是否定位到
    常规踩坑大概就是这些。

写在最后

个人自动化脚本不用太在意这些话,主要对项目的自动化测试脚本
写法都大差不差,无非就是方法的封装和框架,框架主要是:公用方法,元素存放,配置,测试用例,结果验证,报告存放,文件存放,启动器。接手别人的自动化脚本时先定位框架里面的这几个的位置能够快速的理解别人的自动化脚本。


文章作者: 孙尾苏
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 孙尾苏 !
评论
  目录