【拉勾三期课程贴】web 企业微信实战(一)

标题

web 企业微信实战(一)

课程价值

  • 了解 selenium IDE
  • 掌握使用remote复用已有的浏览器
  • 掌握使用cookie登陆

大纲

  • selenium简介
  • selenium IDE
  • 使用remote复用已有的浏览器
  • 使用cookie登陆

时长

90分钟

PPT

https://pdf.ceshiren.com/lg3/selenium%20企业微信1/assets/player/KeynoteDHTMLPlayer.html#0

脚本编写

应用

常见问题

driver 常见问题

  • chromedriver的配置问题。
  • 下载浏览器对应的driver版本,chromedriver 配置环境变量
  • 配置完环境变量打印一下 PATH
  • 重启命令行以及 pycharm

报错如何查看

1、从后往前,找到最后一行的E ,对应的报错信息
2、找到你的【文件名 :行号】 ,如果有多行调用,找到最后被调用的那一行代码,提示的错误信息。

断言

1、每条测试用例必须要加入断言
2、适当的加入一些断言在测试用例中,一般最后一个操作步骤 ,必须要加入验证点
3、如果发生了页面的切换,通过页面标题,查找上下页面不同的元素来进行判断
4、页面切换,

参考链接

selenium 官网:https://www.selenium.dev/
selenium python document: https://seleniumhq.github.io/selenium/docs/api/py/

复用浏览器

配置

  • windows


    windows 启动:
    chrome --remote-debugging-port=9222
    mac 启动:
    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

  • 配置

  • 浏览器
    1. 需要退出当前所有的谷歌浏览器(特别注意)
    1. 找到chrome的启动路径(下一页ppt)
    1. 配置环境变量(下一页ppt)
    1. 启动命令windows:chrome --remote-debugging-port=9222
  • 启动命令mac:Google\ Chrome --remote-debugging-port=9222
    1. 访问http://localhost:9222/

复用浏览器

代码参考:


    def test_cookie(self):
        # cookies = self.driver.get_cookies()
        # print(cookies)
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")

        cookies = [{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.vid', 'path': '/', 'secure': False, 'value': '1688851905935585'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.vid', 'path': '/', 'secure': False, 'value': '1688851905935585'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.corpid', 'path': '/', 'secure': False, 'value': '1970325054155915'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.sid', 'path': '/', 'secure': False, 'value': 'IiwmHmbRQC3UgqmekvGcsqjGsmhinLGD1Fs6VM0ep4c-M62KyX1xelNQQwT2FXMJ'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.d2st', 'path': '/', 'secure': False, 'value': 'a9827484'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.vst', 'path': '/', 'secure': False, 'value': 'IpjrSY68ghhDpX4Y2TYQtR0gQBpKDwr0IA3kDr_2PW_SH1JzxTin6morWg745a7hV5ThIi3ZG4Hhp-W9YilT-VRrQVkGREEkKhuW00BzYAfpPWRx8HoV-g345wlilRNN-RpL-RnWeoAPjXYiIQbSodU2kAKb53UdYWzSWqSxA4YpSFPLKh0gpgn6BnlBhwwF58ZeWw1hcUhGCho1lW7RfJYFCA19P5xbDOIihF8BW5OHKEGsXsqXXdlGrl2u8nPS8VD6EkDokIO525jdTelX_w'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ltype', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.qq.com', 'expiry': 2147385600.31143141, 'httpOnly': False, 'name': 'pgv_pvid', 'path': '/', 'secure': False, 'value': '8764122590'}, {'domain': '.work.weixin.qq.com', 'expiry': 1629268354, 'httpOnly': False, 'name': 'Hm_lvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1595508672,1597647639,1597674494,1597732354'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ref', 'path': '/', 'secure': False, 'value': 'direct'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.refid', 'path': '/', 'secure': False, 'value': '95284373277283'}, {'domain': '.qq.com', 'expiry': 1597842202, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False, 'value': 'GA1.2.1667856325.1597673798'}, {'domain': 'work.weixin.qq.com', 'expiry': 1597763889, 'httpOnly': True, 'name': 'ww_rtkey', 'path': '/', 'secure': False, 'value': '81hlu2n'}, {'domain': '.qq.com', 'expiry': 1597755862, 'httpOnly': False, 'name': '_gat', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.qq.com', 'expiry': 2147385600, 'httpOnly': False, 'name': 'pgv_pvi', 'path': '/', 'secure': False, 'value': '7102834688'}, {'domain': '.qq.com', 'expiry': 1913072077, 'httpOnly': False, 'name': 'tvfe_boss_uuid', 'path': '/', 'secure': False, 'value': '1cebc3be69544fcc'}, {'domain': '.work.weixin.qq.com', 'expiry': 1600347808, 'httpOnly': False, 'name': 'wwrtx.i18n_lan', 'path': '/', 'secure': False, 'value': 'en-us%2Cen'}, {'domain': '.qq.com', 'expiry': 1660827802, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'GA1.2.2051744024.1597673798'}, {'domain': '.work.weixin.qq.com', 'expiry': 1629209796, 'httpOnly': False, 'name': 'wwrtx.c_gdpr', 'path': '/', 'secure': False, 'value': '0'}]

        for cookie in cookies:
            if 'expiry' in cookie.keys():
                cookie.pop('expiry')
            self.driver.add_cookie(cookie)

        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
        self.driver.find_element(By.ID, "menu_contacts").click()

    def test_cookie1(self):

        # Shelve 小型的数据库, 对象持久化保存方法,
        db = shelve.open("mydb/logincookies")
        cookies = db['cookie']
        db.close()
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")

        for cookie in cookies:
            if 'expiry' in cookie.keys():
                cookie.pop('expiry')
            self.driver.add_cookie(cookie)

        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
        self.driver.find_element(By.ID, "menu_contacts").click()

作业

  • 使用cookie 登录企业微信,完成导入联系人,加上断言验证

课后反馈

https://github.com/JuliaZxr/hogwarts_lg3_Yuki.git

https://github.com/xiaocaiji945/hogwarts_lyd

非常好,可以再试着使用shelve 将数据持久化保存。

不错。
待改进,setup里面已经有 获取cookie了,在用例里就可以省略这一步。

王瑀-2-深圳
selenium作业1

下面代码是存cookie, 下次再运行的时候就可以在db[‘cookie’]里将cookie读出来遍历,而不需要再定义cookies了。

https://github.com/shifangxue/Hogwarts_LG3

老师:
windows环境,执行send_keys的文件的绝对路径时,就报错,最终换成了d:/connect.xlsx这样,不知道是哪里有问题,路径分隔符也换过,转义也加过,都会报错

windows 路径一般都是反斜杠,路径前面要加上 r"d:\xx\xxx"

https://github.com/shadingyu96/Shadingyu.git

https://github.com/len-zhang/Hogwarts_selenium_zuoye

https://github.com/yxgogoing/hogwarts-homework/tree/master/python_practice/Work5_wecom

企业微信导入联系人作业:

企业微信web自动化测试作业

老师,这是本次的作业
https://github.com/endeavor-hxs/test_prac/tree/master/test_wechat_upload

https://github.com/realtalk1007/hogwarts

企业微信实战一作业

https://github.com/z1069867141/hogwarts_lg