Karate Appium执行报无效选择器错误,桌面浏览器运行正常
Karate UI移动端PWA自动化:遍历元素获取文本失败
问题场景
用Karate UI框架做PWA应用自动化测试,桌面浏览器执行完全正常,但在移动端执行时,遍历locateAll返回的元素列表获取文本环节抛出异常。
原测试代码
@home Scenario: Extract Subheadings using XPath Given driver baseUrl And delay(3000) * waitFor("//div[@class='ca23_home_heading']") * def subheadings = locateAll("//div[@class='ca23_home_heading']") * print 'subheading element:: ',subheadings * def texts = [] * karate.forEach(subheadings, function(element){ karate.appendTo(texts, element.text) }) * print 'texts in ui',texts
移动端执行报错信息
* karate.forEach(subheadings, function(element){ karate.appendTo(texts, element.text) }) js failed: >>>>>> 01: karate.forEach(subheadings, function(element){ karate.appendTo(texts, element.text) }) <<<<<< org.graalvm.polyglot.PolyglotException: locator failed twice: {"status":32,"value":{"message":"invalid selector: An invalid or illegal selector was specified\n (Session info: chrome=115.0.5790.138)"},"sessionId":"558c7347-0a2e-48c4-9080-3728208c50b8"} - com.intuit.karate.driver.WebDriver.elementId(WebDriver.java:217) - com.intuit.karate.driver.appium.AppiumDriver.text(AppiumDriver.java:146) - com.intuit.karate.driver.DriverElement.getText(DriverElement.java:277) - <js>.:anonymous(Unnamed:1)
解决方法
1. 直接批量获取文本,规避手动遍历
Karate支持对locateAll返回的元素集合直接调用.text,一次性提取所有元素文本,避免Appium逐个元素重新定位时出现的选择器兼容问题:
@home Scenario: Extract Subheadings using XPath Given driver baseUrl * waitFor("//div[@class='ca23_home_heading']").visible * def texts = locateAll("//div[@class='ca23_home_heading']").text * print 'texts in ui',texts
2. 替换为CSS选择器
移动端Chrome对CSS选择器的支持比XPath更稳定,改用CSS选择器重新编写逻辑:
@home Scenario: Extract Subheadings using CSS Selector Given driver baseUrl * waitFor("div.ca23_home_heading").visible * def texts = locateAll("div.ca23_home_heading").text * print 'texts in ui',texts
3. 优化等待逻辑
移除硬编码的delay(3000),改用waitFor等待元素可见,确保元素完全加载后再执行后续操作:
* waitFor("div.ca23_home_heading").visible
内容的提问来源于stack exchange,提问作者sona CA
相关产品推荐
相关产品推荐

