十二、Web端自动化测试实战(一)

目录

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

问题整理

  1. chromedriver的配置问题。
  • 下载浏览器对应的driver版本
  • chromedriver配置环境变量
  • 重启命令行以及pycharm
  1. 学会找报错信息,以及理解报错信息的含义

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
  • 官网:https://www.selenium.dev/selenium/docs/api/py/

Selenium IDE的缺点(不推荐)

  • 生成大量冗余代码,比如导入,滑入,滑出等等
  • 实现复杂的业务逻辑,比如 加入if,else 逻辑处理,不方便
  • 录制出来的用例不够完整, 没有断言

复用浏览器操作

  • 概念:使用已打开的浏览器进行操作
  • 浏览器
    1. 需要退出当前所有的谷歌浏览器(特别注意

    2. 找到chrome的启动路径


      image.png
    3. 配置环境变量


      image.png
    4. 启动命令windows:chrome --remote-debugging-port=9222

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

    6. 访问:http://localhost:9222/

    7. windows 找到chrome 路径

  • python
    1. chrome_arg = webdriver.ChromeOptions()
    2. chrome_arg.debugger_address='127.0.0.1:9222'
    3. self.driver = webdriver.Chrome(options=chrome_arg)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By


class TestWX:
    def setup(self):
        """
        复用浏览器
        """
        option = Options()
        """
        注意:
        1. 浏览器要提前打开
        2. 9222端口要与命令行启动的端口一致
        """
        option.debugger_address = "127.0.0.1:9222"
        self.driver = webdriver.Chrome(options=option)
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)

    def teardown(self):
        self.driver.quit()

    def test_wx(self):
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
        self.driver.find_element(By.ID, 'menu_contacts').click() # 点击通讯录

使用cookie登录

  • 什么是cookie
    • Cookie是一些数据,存储于你电脑上的文本文件中
    • 当web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息
    • Cookie解决“如何记录客户端的用户信息”
  • 获取cookie
    • driver.get_cookies()
    def test_cookie(self):
        # 获取当前页面的cookies
        cookies = self.driver.get_cookies()
        print(cookies)
        # 将每个cookie放在当前的页面上
        for cookie in cookies:
            """add_cookie方法传入字典类型,且关键字的值不能为float类型,所以应将cookie中的到期时间去掉"""
            if "expiry" in cookie.keys():
                cookie.pop("expiry")
            self.driver.add_cookie(cookie)
        self.driver.refresh() # 刷新页面
  • 存储cookie,使用Python自带的小型数据库shelve
    • shelve存储类型为key:value形式
    • 打开数据库:shelve.open("文件名")
    • 传入数据:db["key"] = value
    • 关闭数据库:db.close()
    • 注意,数据传入后,db文件就会生成,此时就应把db["key"] = value代码注释掉
    def test_shelve(self):
        """shelve 是Python自带的对象持久化存储小型数据库
        以key:value形式存储
        """
        db = shelve.open("cookies") # 生成cookies.db 文件
        # db["cookie"] = self.driver.get_cookies() # 获取cookie后将此代码注释
        cookies = db["cookie"]
        db.close() # 关闭数据库

        # 打开新页面
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
        # 加入cookie
        for cookie in cookies:
            if "expiry" in cookie.keys():
                cookie.pop("expiry")
            self.driver.add_cookie(cookie)
        self.driver.refresh()  # 刷新页面

实例:企业微信导入联系人功能

    def test_import_contacts(self):
        # shelve 模块, python 自带的对象持久化存储
        db = shelve.open('cookies')
        cookies = db['cookie']
        db.close()
        # 打开无痕新页面
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
        # 加入cookie
        for cookie in cookies:
            if 'expiry' in cookie.keys():
                cookie.pop('expiry')
            self.driver.add_cookie(cookie)

        # 刷新当前页面,获取登录状态
        self.driver.refresh()
        # 点击【导入联系人】
        self.driver.find_element(By.CSS_SELECTOR, ".index_service_cnt_itemWrap:nth-child(2)").click()
        # 上传文件,选择文件的完整路径上传
        self.driver.find_element(By.CSS_SELECTOR, ".ww_fileImporter_fileContainer_uploadInputMask").send_keys(
            "/Users/juanxu/Downloads/mydata.xlsx")
        # 断言上传文件名,与实际文件名一致
        result = self.driver.find_element(By.CSS_SELECTOR, ".ww_fileImporter_fileContainer_fileNames").text
        assert "mydata.xlsx" == result
        sleep(5)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容