51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4062|回复: 0
打印 上一主题 下一主题

[原创] 线性脚本到PO模式转换实战-小米商城

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:02
  • 签到天数: 1046 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-4-27 09:54:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    跟着本篇文档操作可加深对PO模式的理解,对于不知道或者不熟练怎么改写的PO模式的同学来说,我相信这是一篇非常值得动手进行实践的文档。
      实现效果如下图:

      实现小米官网登录->搜素->加入购物车流程。

      大致拆分步骤
      1.编写功能脚本
      2.拆分到不同页面
      3.改写元素定位
      4.配置信息放到yaml文件汇总
      5.封装常用功能函数

      本篇文章完成功能:
      1.登录功能(协议非每次出现)
      2.搜索商品进入详情页
      3.商品加入购物车
      功能实现脚本
    from time import sleep

    from selenium import webdriver
    #打开浏览器
    driver=webdriver.Chrome()
    driver.get('https://www.mi.com/search?keyword=%E5%B0%8F%E7%B1%B310')
    driver.implicitly_wait(5)
    #实现登录操作
    driver.find_element_by_xpath('//*[@id="J_siteUserInfo"]/a[1]').click()

    #声明同意
    reports=driver.find_elements_by_class_name('btn-primary')

    print(reports)
    if reports:
        reports[0].click()

    driver.find_element_by_id('username').send_keys('13889154495')
    driver.find_element_by_id('pwd').send_keys('xinsheng2')
    #driver.find_element_by_id('login-butto').click()
    driver.find_element_by_xpath('//*[@id="login-button"]').click()
    sleep(2)
    #driver.execute_script("document.getElementById('login-butto').click()")


    #搜索功能
    driver.find_element_by_id('search').send_keys('小米10定制礼盒\n')
    #选择第一个商品
    driver.find_element_by_partial_link_text('小米10定制礼盒').click()
    sleep(2)

    #切换最新窗口句柄
    a=driver.window_handles
    driver.switch_to.window(a[-1])
    sleep(1)

    #加入购物车
    driver.find_element_by_xpath('//*[@id="app"]/div[3]/div/div/div/div[1]/div[2]/div[6]/div[1]/a').click()

    #加入购物车成功
    assertone=driver.find_element_by_class_name('goods-info').text
    assert '加入购物车'in assertone

    driver.quit()


      1.0版本-实现功能

      遇到的问题
      问题1.声明窗口确定没点击成功,导致用户名定位失败
    reports=driver.find_elements_by_class_name('btn btn-primary')
    if reports:
        reports[0].click()

    driver.find_element_by_id('username').send_keys('xxxx')//报错



      btn后面有空格,代表两个类名称,classname是无法选择两个类名的。
      问题2.输入账号、密码成功后登录按钮无法定位
    driver.findelementby_id('login-butto').click()

      通过代码我们可以发现是通过id进行定位的,但就是定位不上,改为xpath定位成功。
    driver.findelementby_xpath('//*[@id="login-button"]').click()

      之前我曾改为js定位,包下面的错误,目前为止没有找到方案。
    driver.execute_script("document.getElementById('login-butto').click")

      上面代码运行报错‘Cannot read property 'click' of null’。
      问题3 窗口句柄切换提示‘'list' object is not callable’

    #切换商品详情页窗口句柄
    for handle in driver.window_handles():
        driver.switch_to.window(handle)
        if '黑鲨双翼手柄套装小米10定制礼盒立即购买-小米商城'==driver.title:
            break


      改为下面的代码通过:
    a=driver.window_handles
    driver.switch_to.window(a[-1])




    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 00:28 , Processed in 0.063612 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表