最近在用katalon前端自动化工具的过程中,发现有的元素不能点击;我这边遇到的是,输入关键字再对元素进行点击的方法,网上百度之后搜到这篇https://blog.csdn.net/qq_18659137/article/details/87968608,直接放入之后我这边会报错,不能解决,后边经过参考博主的方法,修改有了下边的方法,参考注释用script点击的方法部分即可,所有代码如下,放入之后即可解决此种输入式下拉框的点击问题;有错误的地方欢迎批评指正(红色部分加入,然后直接调用即可点击),最新版本7.5已经解决了这个bug,最近用到时发现,不需要用javascript点击了,老版本的仍然可以用下边自定义关键字解决。
package my.test.method
import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.checkpoint.Checkpoint
import com.kms.katalon.core.checkpoint.CheckpointFactory
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords
import com.kms.katalon.core.model.FailureHandling
import com.kms.katalon.core.testcase.TestCase
import com.kms.katalon.core.testcase.TestCaseFactory
import com.kms.katalon.core.testdata.TestData
import com.kms.katalon.core.testdata.TestDataFactory
import com.kms.katalon.core.testobject.ObjectRepository
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords
import internal.GlobalVariable
import MobileBuiltInKeywords as Mobile
import WSBuiltInKeywords as WS
import WebUiBuiltInKeywords as WebUI
import org.openqa.selenium.WebElement
import org.openqa.selenium.WebDriver
import org.openqa.selenium.By
import com.kms.katalon.core.mobile.keyword.internal.MobileDriverFactory
import com.kms.katalon.core.webui.driver.DriverFactory
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
import com.kms.katalon.core.testobject.ConditionType
import com.kms.katalon.core.testobject.TestObjectProperty
import com.kms.katalon.core.mobile.helper.MobileElementCommonHelper
import com.kms.katalon.core.util.KeywordUtil
import com.kms.katalon.core.webui.exception.WebElementNotFoundException
import org.openqa.selenium.JavascriptExecutor as JavascriptExecutor
import com.kms.katalon.core.webui.common.WebUiCommonHelper as WebUiCommonHelper
class click_method {
/**
* Refresh browser
*/
@Keyword
def refreshBrowser() {
KeywordUtil.logInfo("Refreshing")
WebDriver webDriver = DriverFactory.getWebDriver()
webDriver.navigate().refresh()
KeywordUtil.markPassed("Refresh successfully")
}
/**
* Click element
* @param to Katalon test object
*/
@Keyword
def clickElement(TestObject to) {
try {
WebElement element = WebUiBuiltInKeywords.findWebElement(to);
KeywordUtil.logInfo("Clicking element")
element.click()
KeywordUtil.markPassed("元素已经被点击")
} catch (WebElementNotFoundException e) {
KeywordUtil.markFailed("元素没有发现")
} catch (Exception e) {
KeywordUtil.markFailed("元素点击失败")
}
}
/**
* 添加通过JavaScript点击的方法
* 此方法仅供参考,亲测可用,参考此部分方法即可,其他是新建的时候自动生成的,也可以使用;
* @param table Katalon test object represent for HTML table
* @param outerTagName outer tag name of TR tag, usually is TBODY
* @return All rows inside HTML table
*/
@Keyword
def clickByJavascript(TestObject to) {
try {
WebDriver webDriver = DriverFactory.getWebDriver()
WebElement element = WebUiBuiltInKeywords.findWebElement(to,30)
JavascriptExecutor executor = ((webDriver) as JavascriptExecutor)
KeywordUtil.logInfo("Clicking element")
executor.executeScript('arguments[0].click()', element)
KeywordUtil.markPassed("元素已经被点击")
} catch (WebElementNotFoundException e) {
KeywordUtil.markFailed("元素没有发现")
} catch (Exception e) {
KeywordUtil.markFailed("元素点击失败")
}
}
/**
* Get all rows of HTML table
* @param table Katalon test object represent for HTML table
* @param outerTagName outer tag name of TR tag, usually is TBODY
* @return All rows inside HTML table
*/
@Keyword
def List<WebElement> getHtmlTableRows(TestObject table, String outerTagName) {
WebElement mailList = WebUiBuiltInKeywords.findWebElement(table)
List<WebElement> selectedRows = mailList.findElements(By.xpath("./" + outerTagName + "/tr"))
return selectedRows
}
}