当前位置:网站首页>第一次因没有找到iframe元素而怀疑selenium4是不是有bug?
第一次因没有找到iframe元素而怀疑selenium4是不是有bug?
2022-08-11 08:04:00 【我先测了】
前因
自从在闲鱼开始售卖技能至今,已有十几二十的访客来付费寻求答案,本人也是不甚荣幸、受宠若惊,
但是有一点却不那么美丽,对于寻求答案的人来说是物美价廉,但是对于题主却是损失,甚至是亏本;
不论如何,总归是有点价值,能被有需要的人找到,从而印证自己的技能是有价值而被需要,很不错。
后果
本人最擅长的是python/java自动化测试领域,自然是在行自动化,但是也接到不少其他领域的需求;
譬如:matplotlib、flask、django、numpy、nltk等等方面,当然有些学习成本低,可以应急处理;
有时候关于web开发就有点捉襟见肘,每次评估需求的时候,都要搭建环境,而这个成本就是不计费的。
正题
好不容易有解决自动化测试问题的单子,不管是接口还是UI自动化,我都没上面的烦恼;因为开发环境是现成的,但是被测环境却是五花八门。
- 需求
UI自动化:模拟登录163邮箱,为什么每次打开了浏览器,但是却不能输入account/passwd?
- 分析1
既然已经到了打开浏览器的地步,那么不能输入账号操作?无非就是找不到元素呗,在当我看到她的代码时,我整个人都不淡定了。
- 代码1:测试用例类
import unittest
from login import PageLogin
class TestLogin(PageLogin):
def testcaselogin(self):
username = "XXXXX"
PWD = "XXXXXX"
def page_login(self,username,password):
username = "XXXXXX"
PWD = "xxxxxXX"
self.page_input_username(username)
self.page_input_password(PWD)
self.page_click_login_btn()
- 代码2:封装的页面操作类
from base.basepage import Base
class PageLogin(Base):
#登录
def page_click_login_link(self):
self.base_click(page.login_link)
#输入用户名
def page_input_username(self,email):
self.base_input(page.login_username,email)
login_username = By.name,"email"
#输入密码
def page_input_password(self,password):
self.base_input(page.login_password,password)
login_pwd = By.name,"password"
#点击登录
def page_click_login_btn(self):
self.base_click(page.login_btn)
login_btn = By.id,"dologin"
- 分析2
从以上代码层面来讲,一个测试用例执行(远程看了才知道她用的是vc编辑器),当然只能打开浏览器呢,
因为它是继承了PageLogin类,里面有打开地址操作,而在当前测试类是没有执行打开操作的,但是它没执行帐号操作是因为第二个原因;
原因就是:page.login_password,这个元素还被注释了,整个测试用例根本可不能找到元素进行操作;
- PO设计模式实现的UI自动化测试框架,感觉她的代码是东拼西凑的,而且还没有完全理解这个设计模式。
解决
本着收人钱财与人消灾的使命,解决这类问题,自问还是手到擒来!
- 事实证明自己是错的,尽管想法没问题,但是方向可能跑偏了。
page的元素我给她补齐了,好在这些页面元素很简单,都是有id或者name的。
只是因为她使用了selenium4的版本,这让我一度怀疑它是有问题的,题主也一直定位不到元素?
- 思考:都是id或者name没有理由定位不到元素,肯定是哪里疏忽了。
我也有想过frame或iframe标签,但是第一次在F12的源码搜索下没有结果?
- 让我怀疑的selenium4,回到家立马用selenium3版本试了一下,大失所望!最终还是确认还是iframe的问题,打开浏览器输入目标地址,它没有指定到iframe这个标签上操作元素,直接操作是无效的,导致代码一直报错找不到页面元素超时。
代码
从提出问题到确认问题、找到问题、解决问题,花的时间成本着实有点大,因为只收了9.9元。
- 改造后的测试类
import unittest
from page.login import PageLogin
class TestLogin(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.PL = PageLogin()
def test_page_login(self):
username = "XXXXXX"
PWD = "XXXXXXXX"
self.PL.switch_iframe()
self.PL.page_input_username(username)
self.PL.page_input_password(PWD )
self.PL.page_click_login_btn()
if __name__ == '__main__':
unittest.main()
- 增加基础类的方法
def switch_iframe(self):
self.driver.switch_to.frame(self.driver.find_elements(By.TAG_NAME, "iframe")[0])
# self.driver.switch_to.frame(self.base_find_element((By.XPATH,"//iframe[starts-with(@id,'x-URS-iframe')]")))
# self.driver.switch_to.frame(0)
# self.driver.switch_to.frame("id or name")
总结
所以不要夜郎自大,戒骄戒躁,不要粗心,原本真的是几分钟可以解决的问题,而要浪费1整天。
对于UI自动化的问题无非就是解决定位页面元素的问题,至于怎么想的:这个元素怎么找到,如何写最好看的xpath表达式等等,这个就需要勤加练习。
边栏推荐
- 2021-08-11 For loop combined with multi-threaded asynchronous query and collect results
- 1091 N-Defensive Number (15 points)
- string类接口介绍及应用
- 囍楽cloud task source code
- CSDN21天学习挑战赛——封装(06)
- Creo9.0 特征的成组
- 租房小程序
- Serverless + domain name can also build a personal blog? Really, and soon
- oracle19c does not support real-time synchronization parameters, do you guys have any good solutions?
- Linux,Redis中IOException: 远程主机强迫关闭了一个现有的连接。解决方法
猜你喜欢
1036 Programming with Obama (15 points)
Do you know the basic process and use case design method of interface testing?
Redis 只会用缓存?20种妙用让同事直呼牛X(荣耀典藏版)
基于微信小程序的租房小程序
2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处。若小球在编号为 i 的弹
1002 Write the number (20 points)
JUC并发编程
机器学习(一)数据的预处理
Active users of mobile banking grew rapidly in June, hitting a half-year high
Keep track of your monthly income and expenses through bookkeeping
随机推荐
go-grpc TSL authentication solution transport: authentication handshake failed: x509 certificate relies on ... ...
1096 big beautiful numbers (15 points)
软件测试常用工具的用途及优缺点比较(详细)
兼容并蓄广纳百川,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang复合容器类型的声明和使用EP04
Active users of mobile banking grew rapidly in June, hitting a half-year high
Serverless + domain name can also build a personal blog? Really, and soon
初级软件测试工程师笔试试题,你知道答案吗?
Test cases are hard?Just have a hand
Dynamic Agent Learning
go 操作MySQL之mysql包
8、Mip-NeRF
Square, multi-power, square root calculation in Tf
基于微信小程序的租房小程序
Find the latest staff salary and the last staff salary changes
我的创作纪念日丨感恩这365天来有你相伴,不忘初心,各自精彩
4.1-支持向量机
少年成就黑客,需要这些技能
查找最新人员工资和上上次人员工资的变动情况
如何通过开源数据库管理工具 DBeaver 连接 TDengine
The most complete documentation on Excel's implementation of grouped summation