文章目录

  • 15-4 Web 企业微信实战1
    • selenium简介
        • selenium 架构
    • 分析报错信息
    • Selenium ide
      • 插件下载
      • 录制自动化脚本
    • 环境配置
      • 下载浏览器对应的driver版本
      • 配置环境变量
    • 复用浏览器
    • 复用已有浏览器(调试)
    • cookie登录
      • 获取cookie,序列化后存入yaml文件内
      • 使用序列化cookie的方法进行登录
  • 15-2 Web 企业微信实战2
    • 大纲
      • 官网链接
      • PO设计思想
      • 实战练习
      • PO六大原则
    • 作业

15-4 Web 企业微信实战1

课程贴:https://ceshiren/t/topic/11708/8

selenium简介

  • Selenium is a suite of tools to automate web browsers across many platforms.
  • runs in many browsers and operating systems
  • can be controlled by many programming languages and testing frameworks

selenium 架构

官网:
https://www.selenium.dev/selenium/docs/api/py/
https://www.selenium.dev/

分析报错信息

学会找报错信息,以及理解报错信息的含义
1、从后往前看,找到最后的几个E
2、找到 【当前文件名:行号】 ,点到代码中,分析是否由于书写问题,定位的问题…

Selenium ide

插件下载

Chrome:在Chrome搜索selenium ide 下载即可
离线插件下载:

链接:https://pan.baidu/s/1UceWas3jQJxXWnRTVJCGjA
密码:mf9t
firefox:Selenium IDE – 下载 🦊 Firefox 扩展(zh-CN)

录制自动化脚本

环境配置

下载浏览器对应的driver版本

chromedriver下载地址与webview自动化关键代码

配置环境变量

Windows:

Mac:

vim ~/.bash_profile
export PATH=$PATH:[chromedriver所在路径]

注意事项:

  • Windows配置完成后,一定要重启cmd、pycharm
  • mac配置完成后,需要重新加载环境变量 source ~/.bash_profile

参考地址:Selenium环境安装配置

  • 查看环境变量是否生效 Windows

  • 查看环境变量是否生效 Mac

复用浏览器

1. 需要退出当前所有的谷歌浏览器(特别注意)
2. 找到chrome的启动路径(下一页ppt)
3. 配置环境变量(下一页ppt)
4. 启动命令

windows:chrome --remote-debugging-port=9222
mac:Google\ Chrome --remote-debugging-port=9222
chrome_arg=webdriver.ChromeOptions()
chrome_arg.debugger_address=127.0.0.1:9222’
self.driver = webdriver.Chrome(options=chrome_arg)

复用已有浏览器(调试)

  • chrome启动路径-windows

  • chrome启动命令

      /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome - -remote-debugging-port=9222
      注意:使用tab键,不要手动输入
    
      启动命令windows:chrome --remote-debugging-port=9222
      启动命令mac:Google\ Chrome --remote-debugging-port=9222
    

cookie登录

  • Cookie 是一些数据, 存储于你电脑上的文本文件中
  • 当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息
  • Cookie 解决“如何记录客户端的用户信息”

获取cookie,序列化后存入yaml文件内

def test_get_cookie():
  opt = webdriver.ChromeOptions()
  # 设置debug地址
  opt.debugger_address = "127.0.0.1:9222"
  driver = webdriver.Chrome(options=opt)
  driver.implicitly_wait(5)
  driver.get("https://work.weixin.qq/wework_admin/frame#contacts")
  cookie = driver.get_cookies()
  print(cookie)
  with open("data.yaml","w",encoding="UTF-8") as f:
    yaml.dump(cookie,f)

使用序列化cookie的方法进行登录

def test_login():
  driver = webdriver.Chrome()
  driver.implicitly_wait(5)
  driver.get("https://work.weixin.qq/wework_admin/loginpage_wx?")
  with open("data.yaml",encoding="UTF-8") as f:
    yaml_data = yaml.safe_load(f)
    for cookie in yaml_data:
      driver.add_cookie(cookie)
  driver.get("https://work.weixin.qq/wework_admin/frame#index")
  time.sleep(10)

15-2 Web 企业微信实战2

  • 课程贴:https://ceshiren/t/topic/11815
  • 课堂源码链接:https://github/ceshiren/HogwartsFIS04

大纲

  • selenium PO设计模式核心思想
  • selenium PO设计模式六大原则
  • selenium PO设计模式实战练习








22种代码异味

官网链接

selenium 官方网站:
PO设计模式 :: Selenium 文档

马丁福勒个人博客
https://martinfowler/bliki/PageObject.html

PO设计思想

实战练习

代码示例

def test_login():
    opt = webdriver.ChromeOptions()
    opt.debugger_address = "127.0.0.1:9222"
    driver = webdriver.Chrome(options=opt)
    driver.implicitly_wait(10)
    driver.get("https://work.weixin.qq/wework_admin/frame")
    driver.find_element_by_id("menu_contacts").click()
    ele = (By.CSS_SELECTOR, ".ww_operationBar .js_add_member")
    # 显示等待,等待元素是可点击状态
    WebDriverWait(driver,10).until(expected_conditions.element_to_be_clickable(ele))
    # 解决点击无效问题;设置死循环多次点击,直到目标元素出现后,跳出死循环
    while True:
        driver.find_element(*ele).click()
        element = driver.find_elements_by_id("username")
        if len(element) > 0:
            break
    driver.find_element_by_id("username").send_keys("5151155")
    driver.find_element_by_id("memberAdd_acctid").send_keys("xx151utuds")
    driver.find_element_by_id("memberAdd_mail").send_keys("s1sa51t1d@qq")
    driver.find_element_by_css_selector(".js_btn_save").click()
    time.sleep(1)
    eles = driver.find_elements_by_css_selector(".member_colRight_memberTable_td:nth-child(2)")
    name_list = []
    for value in eles:
        # 获取元素属性title的值,存入list内
        print(value.get_attribute("title"))
        name_list.append(value.get_attribute("title"))
    # 断言目标名字是否在列表内
    assert "5151155" in name_list
    print(name_list)

PO六大原则


作业

使用PO设计模式编写添加成员自动化测试用例(首页-通讯录-添加成员-断言;首页-添加成员-断言)

更多推荐

15 Web自动化测试实战