首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Cypress 踩坑记-DOM 遮挡

是一个非常流行的测试工具,然而实际使用过程中发现一些问题,这里做些记录。

问题发现

在 下 是非常常用的指令,然而在一些特殊场景下 并不能如想象中那般正常工作。

比如现在有一个弹窗,我们需要测试在点击遮罩层时是否可以正常关闭弹窗。

picture 1

测试代码比较简单:

然后执行 ,发现一切如想象中那般简单,很顺利就通过了。

picture 2

然而当往 中填充了一些内容后,却发现突然这里就报错了。

picture 3

当然,报错是没问题,遮罩层确实被内容遮挡了。问题是刚刚明明也是一样被遮挡,为何就不报错,只是因为内容多了一点就报错,这就很不合适了。

查看文档会发现 还支持坐标或位置参数。

picture 4

然而,并没有什么用,也就是说这个点击位置无关,应该是和 判断元素遮挡有关系,看起来 遮挡计算还需要优化。

原因排查

排查源码可以发现 的 会经过一些判定:

其中比较重要的参数是 ,其数值长这样:

注意其中的 和 ,可以认为就是中心点的坐标。

然后 会使用该坐标获取该位置最顶层的元素:

可以发现这里直接使用 和 去获取元素,然后和当前目标元素去做了对比。

这也就是为什么 有时候可以点,有时候不可以的原因了,简单说就是中心点被遮了就可以点,没被遮就不可以点,还真是简单粗暴 。这也导致了 的不稳定现象。

结果验证

那我们来验证下是不是如此,首先我们先创建一个非常小的遮挡元素,然后放在中央位置,测试下是不是会出问题。代码如下:

结果果然不出所料:

picture 1

为了严谨,我们再测试下另一个 ,我们将四周全部用元素遮挡住,只留下中心一点,然后点击,验证下是不是可以正常。代码如下:

测试代码无需更改:

不出所料,果然可以点击。

picture 2最后

说实在的 这样的遮挡检查方式不太妥当,过于简单粗暴而且很容易让人困惑。理论上而言可以使用 层层比对交叉区域来判定更为妥当。不知道是不是有什么文档导致放弃了。

还有点击的方式感觉也可以再优化一下,比如提供了坐标或者方位,那就应该以提供的坐标或方位来做遮挡判定,现在遇到这种情况只能使用 ,然而使用了 这个测试的意义就少了一大半。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230516A0A6T800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券