UI自动化测试常见的Exception

一. StaleElementReferenceException:

 - 原因:引用的元素已过期。原因是页面刷新了,此时当然找不到之前页面的元素。
 
 - 解决方案:不确定什么时候元素就会被刷新。
   页面刷新后重新获取元素的思路不变,这时可以使用python的异常处理语句:try…except…,
   异常出现时重新执行,关键代码如下

编写脚本时使用异常try捕获异常后,页面刷新后重新获取元素,可以成功找到元素了:
在这里插入图片描述
二. ElementClickInterceptedException


 - 原因:元素定位相互覆盖,元素已经找到,但是无法点击
 
 - 解决方案:
 
 方法一:使用强制等待,但是每次都有类似的元素无法点击使用强制等待的话会延长脚本执行时间
time.sleep()    
注意⚠️:之前便遇到过很多次该问题的报错,就没有管它,但是随着越来越多的元素报该错,每次使用强制等待会大大延长脚本的执行时间。

方法二:显性等待
如下是显示等待的用法和区别
1. element_to_be_clickable--元素是否可点击
2. vibility of element_ located--元素是否可见
3. presence_of_element_located--元素是否存在
如上:三种等待方法,最开始我一直使用的是presence_of_element_located,判断元素是否存在;
最终还是报错,提示元素元素点击拦截异常。
element_to_be_clickable--等待元素出现可以点击,便可以元素定位成功

方法三:使用JS点击
然而有时即使已经显式等待了,却仍然会报错: ElementClickInterceptedException,这多少
有点奇怪。为什么 webdriver 有时就是无法点击,我不知道,也许这和他首先执行的一些验证检查有关,
反正就在这一刻,它不给你点。

方法三的代码如下:
在这里插入图片描述
三. NoSuchElementException:

原因:
 - 前端出现变更,导致定位不到元素;
 - 页面未加载出来元素导致元素找不到,需要加个等待;
 - 定位语法错误;
 - 元素可能在新的Windows窗口,此时需要切换Windows;
 - 页面出现伪元素:显示的是::before、::after这类的元素,被伪元素包裹起来的元素经常会定位不到,此时就需要对伪元素
 进行处理了,解决方式如:http://testingpai.com/article/1638176966906

四.NoSuchWindowException:

 - 没找到窗口句柄handle(浏览器版本与驱动不兼容)
 - 注意⚠️:Web自动化中存在哪三种切换:
 	1. windows窗口切换:切换到要操作的窗口;
 	2. alert弹出框操作;
 	3. iframe切换。
 	操作方式如:https://blog.csdn.net/wsy_666/article/details/132325473

五.TimeoutException:
查找元素超时

六. NoSuchAttributeException:
属性错误

六. ElementNotSelectableException:
元素没有被选中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UI 自动化测试中,如果需要使用 PyMySQL 进行数据库操作,可以将 PyMySQL 封装成一个类,使得 UI 自动化测试代码可以更方便地调用数据库操作。 以下是一个 PyMySQL 封装类的示例: ```python import pymysql class DBHelper: def __init__(self, host, port, user, password, db): self.conn = pymysql.connect( host=host, port=port, user=user, password=password, db=db, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) def execute_sql(self, sql): try: with self.conn.cursor() as cursor: cursor.execute(sql) self.conn.commit() result = cursor.fetchall() return result except Exception as e: print(f"Error: {e}") ``` 在上述代码中,我们定义了一个名为 `DBHelper` 的类,该类接受五个参数:`host`、`port`、`user`、`password` 和 `db`,这些参数分别对应着数据库的主机地址、端口、用户名、密码以及数据库名。 在类的 `__init__` 方法中,我们使用 PyMySQL 创建了一个数据库连接。在 `execute_sql` 方法中,我们可以执行任意 SQL 查询语句,并返回查询结果。 在 UI 自动化测试代码中,我们可以使用以下代码来实例化 DBHelper 类,并调用其中的 `execute_sql` 方法: ```python db = DBHelper('localhost', 3306, 'user', 'password', 'my_database') result = db.execute_sql('SELECT * FROM my_table') ``` 上述代码中,我们实例化了 DBHelper 类,并传递了相应的参数。然后,我们调用 `execute_sql` 方法来执行 SQL 查询语句,并将结果赋值给变量 `result`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值