Parameters 在保存在对象存储库中的对象中,是否可以更改“选定定位器”,以便在运行时更改它?

Parameters 在保存在对象存储库中的对象中,是否可以更改“选定定位器”,以便在运行时更改它?,parameters,automation,katalon-studio,Parameters,Automation,Katalon Studio,我刚刚接触这个应用程序,我很难找到代码,因为我不知道要搜索的确切单词/术语 因此,我创建了一个仅在选定定位器中具有值的对象: 是否可以在此字段中添加变量?我想在本节中应用变量: /tbody/tr[2]/td[2]/span 我计划随机选择tr[2]和td[2] 或者另一个选项(如果可能),覆盖整个选定的定位器字段 蒂亚 关于在Katalon Studio中使用参数化测试对象的简短教程 a 但是,如果您知道如何在脚本模式下编写,则可以直接在脚本中创建对象: TestObject follow

我刚刚接触这个应用程序,我很难找到代码,因为我不知道要搜索的确切单词/术语

因此,我创建了一个仅在选定定位器中具有值的对象:

是否可以在此字段中添加变量?我想在本节中应用变量:

/tbody/tr[2]/td[2]/span
我计划随机选择tr[2]和td[2]

或者另一个选项(如果可能),覆盖整个选定的定位器字段

蒂亚

关于在Katalon Studio中使用参数化测试对象的简短教程

a

但是,如果您知道如何在脚本模式下编写,则可以直接在脚本中创建对象:

TestObject followUpDay = new TestObject.addProperty("xpath", ConditionType.EQUALS, "/tbody/tr[2]/td[2]/span")
导入以下类

import com.kms.katalon.core.testobject.ConditionType
import com.kms.katalon.core.testobject.TestObject as TestObject
b

现在,让我向您展示如何使用Groovy字符串插值向对象添加变量

此代码等同于上述代码:

String xpathToObject = "/tbody/tr[2]/td[2]/span"
TestObject followUpDay = new TestObject.addProperty("xpath", ConditionType.EQUALS, xpathToObject)
但是,如果希望添加变量,例如,为了选择行数和列数,可以使用字符串插值来更改xpathToObject字符串:

通过创建一个

从对象存储库中打开对象 选择属性作为选择方法 单击对象属性中的“添加”按钮 将Name设置为xpathToObject,将condition匹配为equals,Value设置为..../tbody/${variableA}/${variableB}/span注意:我没有编写完整的xpath,因为它很长,无法从屏幕截图复制和粘贴 现在可以使用以下语法调用此对象

findTestObject('{your test object}', [('{property}') : '{value of property}'])
或者,在您的情况下:

findTestObject('span_Date Follow Up Day', [('variableA'):'tr[2]', ('variableB'):'td[2]'])

您可以根据需要更改variableA或variableB和/或在xpath字符串的任何部分使用参数。

希望以下解决方案能有所帮助:

首先,更新对象存储库中的测试对象,如下图所示

在您的测试用例的测试脚本中,可以如下处理:

KeywordLogger log = new KeywordLogger();

// Find test object
def toSpanDate = ObjectRepository.findTestObject("Object Repository/span_Date Follow Up Day");

// Get value of xpath property to replace row number and column number as expectation
def originalXpath = toSpanDate.findPropertyValue('xpath');

// Replace value
def newXpath = originalXpath.replace('pRowNumber', '2');
newXpath = newXpath.replace('pColumnNumber', '2');

// Update xpath property value of test object
toSpanDate = WebUI.modifyObjectProperty(toSpanDate, 'xpath', 'equals', newXpath, true);

// Get new value of xpath property to double check
def currentXpathOfSpan = toSpanDate.findPropertyValue('xpath');
log.logInfo('currentXpathOfSpan: ' + currentXpathOfSpan);
执行结果:

谢谢您的回复,但是/tbody/tr[2]/td[2]/span是我要更改的选定定位器中字符串的一部分。我只是强调我想把这两个变量改成变量。很抱歉给你带来了困惑。那么,如何更改所选定位器中的长字符串呢?我为您提供了字符串的/tbody/tr[2]/td[2]/span部分的示例,但对于较长的字符串也是一样的。可以使用字符串插值来更改字符串的任何部分。${和}之间的部分将替换为变量的值。@Mate Mrše我尝试了这些步骤,直到将名称设置为xpathToObject为止。首先,我没有向值中添加任何变量,以首先测试这是否与使用XPath(而不是属性)的效果相同。这是一个XPath,用于每个月日历中的一天。使用该属性的效果似乎与XPath设置的效果不同。我再次查看了由katalon生成的原始对象,并检查了属性,有一个文本属性,我可以将其随机化,但这并不完美,因为我的随机化是完全随机的。nextInt31没有检查当前月份。
KeywordLogger log = new KeywordLogger();

// Find test object
def toSpanDate = ObjectRepository.findTestObject("Object Repository/span_Date Follow Up Day");

// Get value of xpath property to replace row number and column number as expectation
def originalXpath = toSpanDate.findPropertyValue('xpath');

// Replace value
def newXpath = originalXpath.replace('pRowNumber', '2');
newXpath = newXpath.replace('pColumnNumber', '2');

// Update xpath property value of test object
toSpanDate = WebUI.modifyObjectProperty(toSpanDate, 'xpath', 'equals', newXpath, true);

// Get new value of xpath property to double check
def currentXpathOfSpan = toSpanDate.findPropertyValue('xpath');
log.logInfo('currentXpathOfSpan: ' + currentXpathOfSpan);