selenium学习深入(PO)

本文介绍了Selenium中的PageObject模式,讲解了Cookie登录的过程,并探讨了隐式等待和显式等待的使用。PageObject模式提倡将页面的操作封装为公共方法,提供清晰的API,避免直接暴露页面元素,并强调方法应返回其他PageObjects或用于断言的数据。此外,文章引用了Martin Fowler和Selenium的官方文档作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cookie登录:

  • 第一次登录一个域名,网站会在 Response Header 中加入 Set-Cookie 头
  • Browser 会保存 Cookie 与 Domain
  • 再次发起对相同domain的请求的时候,Browser 会把 Domain 对应的 Cookie 以 Cookie 头的格式发送给对应的 Domain
#response set cookie
set-cookie: wwrtx.i18n_lan_key=zh-CN%2Czh%3Bq%3D0.9%2Cen-US%3Bq%3D0.8%2Cen%3Bq%3D0.7; Path=/; Expires=Tue, 03 Sep 2019 06:19:15 GMT
set-cookie: wwrtx.i18n_lan=zh-cn; Path=/; Expires=Tue, 03 Sep 2019 06:19:15 GMT
set-cookie: wwrtx.ref=direct; Domain=.work.weixin.qq.com; Path=/; HttpOnly
set-cookie: wwrtx.refid=18553809571155839; Domain=.work.weixin.qq.com; Path=/; HttpOnly

#第二次reqeust
cookie: wwrtx.i18n_lan_key=zh-CN%2Czh%3Bq%3D0.9%2Cen-US%3Bq%3D0.8%2Cen%3Bq%3D0.7; wwrtx.i18n_lan=zh-cn; wwrtx.ref=direct; wwrtx.refid=18553809571155839; _ga=GA1.2.1434878657.1564899555; _gid=GA1.2.358486227.1564899555

#登录
set-cookie: wwrtx.vst=bwwJzXzX7P30bdCMNff5DBmaUIkdDUQZYG-ynNp8Oi1d87eZZpJv8t-obxiDtpDRbKkRYnjHAbrvkZEeAlRqqcgXmuT1u24LsC7F1HkwrYmlU-zyg1d4vgzEM2jCVmUFD02KuvHf60UpRWs3WGzQ4pS-pc32aM0w7BTNKVE9srAU8jMWxrjgllRJlItc_ap3nKajZLdOVbrEUHw2kRiUn18BMwWNSo1-h2E4dkh5CmZ52AdZjhb_qOXYjQZjeVoC5yajQL041wAFbgkoRvGk5Q; Domain=.work.weixin.qq.com; Path=/; HttpOnly
set-cookie: wwrtx.d2st=a1678792; Domain=.work.weixin.qq.com; Path=/
set-cookie: wwrtx.sid=PvmFAAW3_ZQOnOfp5SzMi8wH6yHkmO-qU5JS55P3PM0Q8lrAI_GgrlcwvKitXKHf; Domain=.work.weixin.qq.com; Path=/; HttpOnly
set-cookie: wwrtx.ltype=1; Domain=.work.weixin.qq.com; Path=/; HttpOnly
set-cookie: wwrtx.tsid=; Domain=.work.weixin.qq.com; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly
set-cookie: wwrtx.tsid=; Domain=.work.weixin.qq.com; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly
set-cookie: wwrtx.gst=; Domain=.work.weixin.qq.com; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly
set-cookie: wxpay.corpid=1970325013047104; Domain=.work.weixin.qq.com; Path=/
set-cookie: wxpay.vid=1688853941438590; Domain=.work.weixin.qq.com; Path=/

#登录后发起请求
cookie: wwrtx.i18n_lan_key=zh-CN%2Czh%3Bq%3D0.9%2Cen-US%3Bq%3D0.8%2Cen%3Bq%3D0.7; wwrtx.i18n_lan=zh-cn; wwrtx.ref=direct; wwrtx.refid=18553809571155839; _ga=GA1.2.1434878657.1564899555; _gid=GA1.2.358486227.1564899555; wwrtx.vst=bwwJzXzX7P30bdCMNff5DBmaUIkdDUQZYG-ynNp8Oi1d87eZZpJv8t-obxiDtpDRbKkRYnjHAbrvkZEeAlRqqcgXmuT1u24LsC7F1HkwrYmlU-zyg1d4vgzEM2jCVmUFD02KuvHf60UpRWs3WGzQ4pS-pc32aM0w7BTNKVE9srAU8jMWxrjgllRJlItc_ap3nKajZLdOVbrEUHw2kRiUn18BMwWNSo1-h2E4dkh5CmZ52AdZjhb_qOXYjQZjeVoC5yajQL041wAFbgkoRvGk5Q; wwrtx.d2st=a1678792; wwrtx.sid=PvmFAAW3_ZQOnOfp5SzMi8wH6yHkmO-qU5JS55P3PM0Q8lrAI_GgrlcwvKitXKHf; wwrtx.ltype=1; wxpay.corpid=1970325013047104; wxpay.vid=1688853941438590

隐式等待: 服务端会帮你轮询查找,全局性的
显式等待:客户端轮询查找 每找一次元素,等待一个间隔再次查找,知道条件匹配,一次性的
sleep:不建议,不稳定,网速差的会超过你的写死的等待时间,设置的大又会导致在网速好的时候,所有的用例都被拖慢速度。

一个简单的封装:

def click_and_find(x):
    self.click_by_js(*self._add)
    return len(x.find_elements(By.XPATH, '//*[text()="取消"]'))>=1
WebDriverWait(self._driver, 5).until(click_and_find)

PageObject

参考文档

  • 2013 Martin Flower https://martinfowler.com/bliki/PageObject.html
  • 2015 Selenium https://github.com/SeleniumHQ/selenium/wiki/PageObjects
  • Selenium Python Client https://selenium-python.readthedocs.io/page-objects.html
  • Mozilla PyPOM https://pypom.readthedocs.io/en/latest/

PO原则

The public methods represent the services that the page offers
Try not to expose the internals of the page
Generally don’t make assertions
Methods return other PageObjects
Need not represent an entire page
Different results for the same action are modelled as different methods

方法意义

用公共方法代表UI所提供的功能

比如,一个页面,包括添加成员、删除成员、通讯录等等,则 class ContactPage 类下就应该命名为 def add_member、def delete_member、 def contact

 class ContactPage:
 	def add_member(self):
 		pass
 	def def delete_member(self):
 		pass
 	def contact(self):
 		pass

方法应该返回其他的PageObject或者返回用于断言的数据

同样的行为不同的结果可以建模为不同的方法 不要在方法内加断言 字段意义
不要暴露页面内部的元素给外部
不需要建模UI内的所有元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值