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

发表于:2021-2-25 09:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:桃子    来源:51Testing软件测试网原创

  跟着本篇文档操作可加深对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])
  后面的内容更精彩!
  点击下方链接查看完整文章哦~


版权声明:本文出自《51测试天地》第六十期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号