跟着本篇文档操作可加深对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内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任