当前位置:网站首页>第一次因没有找到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表达式等等,这个就需要勤加练习。
边栏推荐
- 2022-08-10 mysql/stonedb-slow SQL-Q16-time-consuming tracking
- The softmax function is used in TF;
- 初级软件测试工程师笔试试题,你知道答案吗?
- Redis source code: how to view the Redis source code, the order of viewing the Redis source code, the sequence of the source code from the external data structure of Redis to the internal data structu
- go-grpc TSL authentication solution transport: authentication handshake failed: x509 certificate relies on ... ...
- 2.1 - Gradient Descent
- Kotlin算法入门求完全数
- Redis 只会用缓存?20种妙用让同事直呼牛X(荣耀典藏版)
- 选择收银系统主要看哪些方面?
- 场地预订系统,帮助场馆提高坪效
猜你喜欢
IQUNIX A80 exploring TTC金粉 初体验
通过记账,了解当月收支情况
几何EX3 功夫牛宣布停售,入门级纯电产品为何总成弃子
JUC并发编程
Machine Learning Summary (2)
Find the latest staff salary and the last staff salary changes
Square, multi-power, square root calculation in Tf
查询跟踪快递单号物流,智能分析物流中转有延误的单号
Analysys and the Alliance of Small and Medium Banks jointly released the Hainan Digital Economy Index, so stay tuned!
【云原生】云原生在网络安全领域的应用
随机推荐
JUC并发编程
string类接口介绍及应用
流式结构化数据计算语言的进化与新选择
C Primer Plus(6) 中文版 第1章 初识C语言 1.1 C语言的起源 1.2 选择C语言的理由 1.3 C语言的应用范围
C Primer Plus(6) 中文版 第1章 初识C语言 1.6 语言标准
机器学习(一)数据的预处理
Redis 只会用缓存?20种妙用让同事直呼牛X(荣耀典藏版)
【BM87 合并两个有序的数组】
兼容并蓄广纳百川,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang复合容器类型的声明和使用EP04
通过记账,了解当月收支情况
【Day_13 0509】▲跳石板
1056 Sum of Combinations (15 points)
3.2-分类-Logistic回归
[Recommender System]: Overview of Collaborative Filtering and Content-Based Filtering
囍楽cloud task source code
我的创作纪念日丨感恩这365天来有你相伴,不忘初心,各自精彩
leetcode:69. x 的平方根
Write a resume like this, easy to get the interviewer
研发了 5 年的时序数据库,到底要解决什么问题?
优炫数据库支持多列分区吗?