线性脚本到PO模式转换实战-小米商城
跟着本篇文档操作可加深对PO模式的理解,对于不知道或者不熟练怎么改写的PO模式的同学来说,我相信这是一篇非常值得动手进行实践的文档。实现效果如下图:
http://www.51testing.com/attachments/2021/02/15326825_202102201443421IbwN.png
实现小米官网登录->搜素->加入购物车流程。
http://www.51testing.com/attachments/2021/02/15326825_202102201444001UiwH.png
大致拆分步骤
1.编写功能脚本
2.拆分到不同页面
3.改写元素定位
4.配置信息放到yaml文件汇总
5.封装常用功能函数
http://www.51testing.com/attachments/2021/02/15326825_202102201516081SbUH.png
本篇文章完成功能:
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').click()
#声明同意
reports=driver.find_elements_by_class_name('btn-primary')
print(reports)
if reports:
reports.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/div/div/div/div/div/div/div/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.click()
driver.find_element_by_id('username').send_keys('xxxx')//报错
http://www.51testing.com/attachments/2021/02/15326825_202102201520401Pbym.png
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])
页:
[1]