51Testing软件测试论坛

标题: 线性脚本到PO模式转换实战-小米商城 [打印本页]

作者: lsekfe    时间: 2021-4-27 09:54
标题: 线性脚本到PO模式转换实战-小米商城
跟着本篇文档操作可加深对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])









欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2