如何在Karate中检查文本显示状态?点击反馈表单后断言报错求助
解决脚本执行时
$ is not defined的异常问题 问题原因
你使用了jQuery的$函数判断元素可见性,但当前测试页面并未加载jQuery库,浏览器无法识别$,因此抛出该异常。
解决方案:改用原生JavaScript判断可见性
用原生JS API替代jQuery方法,无需依赖外部库,稳定性更高:
def visible = script("//div[@class='feedback-wrapper']//textarea", "function(e) { const computedStyle = window.getComputedStyle(e); // 综合判断元素是否可见:display不为none、visibility不为hidden、opacity不为0 return computedStyle.display !== 'none' && computedStyle.visibility !== 'hidden' && computedStyle.opacity !== '0'; }") match visible == false
更简洁的框架自带方案(若使用Selenide类自动化框架)
如果是用Selenide这类UI自动化框架,无需手写脚本,直接用框架内置断言即可:
$(By.xpath("//div[@class='feedback-wrapper']//textarea")).shouldNotBe(visible)
不推荐的方案(注入jQuery)
如果一定要用jQuery,需先在页面注入jQuery脚本,但这种方式依赖外部资源,易导致测试不稳定,不建议使用:
// 先注入jQuery script("var script = document.createElement('script'); script.src = 'https://code.jquery.com/jquery-3.6.0.min.js'; document.head.appendChild(script);") // 等待加载完成后执行原逻辑 sleep(1000) def visible = script("//div[@class='feedback-wrapper']//textarea", "function(e) { return $(e).is(':visible')}") match visible == false
内容的提问来源于stack exchange,提问作者Adem akdag
相关产品推荐
相关产品推荐

