Katalon Studio中同一按钮对象二次点击失败(对象未找到)求助
问题:Katalon中第二次点击“Next Passenger”按钮提示对象未找到
我在做自动化测试时碰到个头疼的问题:页面上的「Next Passenger」按钮第一次点击能正常跳转加载新页面,但第二次点击就报错说找不到该按钮对象。下面是我的测试代码:
WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_SelectAmbCol.CptDr.Duke'), '13', true) WebUI.setText(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/input_pax1_firstName'), 'n') WebUI.setText(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/input_pax1_lastName'), 'n') WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_SelectFemaleMaleNA'), '1', true) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_SelectAfghanAlbanianAlg'), '15', true) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_Day'), '17', true) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_Month'), '09', true) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_Year2006200520042003200'), '19', true) WebUI.click(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/a_Next Passenger')) WebUI.delay(4) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services (1)/select_SelectAmbCol.CptDr.Duke_1'), '16', true) WebUI.delay(4) WebUI.setText(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/input_chd1_firstName'), 'k') WebUI.setText(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/input_chd1_lastName'), 'k') WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_SelectFemaleMaleNA_1'), '0', true) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_Day _1'), '15', true) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_Month _1'), '11', true) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_Year2016201520142013201'), '4', true) WebUI.selectOptionByValue(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/select_SelectAfghanAlbanianAlg_1'), '13', true) WebUI.delay(5) WebUI.click(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/a_Next Passenger')) WebUI.delay(5)
可能的原因&解决方案
我帮你梳理几个常见的问题点和解决办法:
1. 测试对象的定位器依赖了动态页面信息
第一次点击按钮后页面跳转,新页面的结构或属性(比如页面标题、元素层级)可能变化了,但你还是用了和第一次完全一样的测试对象Page_Al-Maha Services/a_Next Passenger。
解决办法:
- 打开Katalon的对象仓库,检查这个按钮的定位策略。尽量用稳定的、不随页面变化的属性来定位:比如按钮的文本
Next Passenger,或者固定的class、id(如果有的话)。 - 举个例子,把定位器改成基于文本的XPath:
//a[normalize-space(text())='Next Passenger'],这样不管页面标题怎么变,只要按钮文本没变就能找到。
2. 固定延迟不可靠
你用了WebUI.delay()来等待页面加载,但固定时间的等待很容易在不同环境下失效——比如测试环境加载慢,5秒还没加载完,元素自然找不到。
解决办法:
- 替换固定延迟为显式等待,等待元素可点击后再执行点击:
// 等待按钮可点击,超时时间设为10秒(可根据实际情况调整) WebUI.waitForElementClickable(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/a_Next Passenger'), 10) WebUI.click(findTestObject('CreateBookingWithChildandInfant_Transit_OR/Page_Al-Maha Services/a_Next Passenger')) - 也可以在Katalon项目设置里开启智能等待(Smart Wait),它会自动等待元素出现再执行操作,减少手动加延迟的麻烦。
3. 第二次点击的按钮对应新的测试对象
注意到你第二次操作的下拉框用了Page_Al-Maha Services (1)开头的对象,说明页面跳转后Katalon自动生成了新页面的对象。那第二次的按钮可能也需要用新页面下的对象,而不是原来的Page_Al-Maha Services/a_Next Passenger。
解决办法:
- 重新录制第二次点击按钮的动作,让Katalon自动生成对应的测试对象(应该是类似
Page_Al-Maha Services (1)/a_Next Passenger这样的路径),然后替换代码中第二次点击的对象路径。
内容的提问来源于stack exchange,提问作者Kasi Naidu
相关产品推荐
相关产品推荐

