如何从第 3 方 jar 文件中的 Katalon 工作室的 testObject 获取 xpath
how to get the xpath from Katalon studio's testObject in 3rd party jar file
我想为 "customize wait" 功能创建第 3 方 jar 文件,它将在 Katalon studio 测试用例中进一步使用,通过调用 "waitTillObjectPresent()" 来同步测试用例。
我从 Katalon Studio 调用函数的示例如下所示:
在这里,我试图从 Katalon Studio 调用 java 函数 "waitTillObjectPresent()"。
WebUI.navigateToUrl('https://www.companysite.com/en')
//Wait for element till present upto 10 sec.
WaitForObject.waitTillObjectPresent'(findTestObject('V3-Web/WaitForObject/Page_Livtten/button_Results'), 10)
WebUI.click(findTestObject('V3-Web/WaitForObjectDemo/Pagetten/button_Results'))
注意:在上面的代码中 "WaitForObject" 是我的 Java Class 而 "waitTillObjectPresent" 是相同的 class.[=13= 中的流畅等待方法]
尝试使用以下 java 代码:
public void waitTillObjectPresent(TestObject to, int waitingtime){
// HERE IS ISSUE, I am not getting TestObject from Katalon Studio calling method
int counter=0;
String locator= object.findPropertyValue('xpath');
System.out.println("xpath is:: " + locator);
WebDriver driver = DriverFactory.getWebDriver();
// HERE IS ISSUE, I am not able to getting WebDriver instance from Katalon Studio
// fluent wait method
Wait wait = new FluentWait(driver )
.withTimeout(waitingtime, TimeUnit.SECONDS)
.pollingEvery(1000, TimeUnit.MILLISECONDS)
.ignoring(WebElementNotFoundException.class)
WebElement ele = (WebElement) wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
counter ++
return driver.findElement(By.xpath(locator));
}
});
System.out.println("Waiting time for Object ::: "+ object+" ::: rendering is :::: " +counter*700 +" ::: miliseconds ie in seconds ::: " +(counter*700)/1000);
}
}
在上面的代码中,我在 2 点出现了错误:
第一个问题:我没有从 Katalon 工作室的 java 程序中获取 TestObject。
第二个问题:我无法使用代码 WebDriver driver = DriverFactory.getWebDriver();
获取 webdriver 实例
请帮助我,我是 Katalon 工作室的新手。
这是最佳解决方案:
第一个问题:我没有从 Katalon 工作室的 java 程序中获取 TestObject。
对于上述问题,您不能像这样收集对象的值String locator= object.findPropertyValue('xpath');
您需要像这样从对象中获取值
public static String getFieldNamesAndValues(final Object obj, boolean publicOnly)
throws IllegalArgumentException, IllegalAccessException {
Class<? extends Object> c1 = obj.getClass();
System.out.println("Class value is c1:::" + c1);
Map<String, Object> map = new HashMap<String, Object>();
Field[] fields = c1.getDeclaredFields();
System.out.println("Fields in objects :: " + fields.toString());
System.out.println("Xpath Before for loop::: " + fields.getClass());
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
System.out.println("Fields name ::: " + name);
if (publicOnly) {
if (Modifier.isPublic(fields[i].getModifiers())) {
Object value = fields[i].get(obj);
map.put(name, value);
}
} else {
fields[i].setAccessible(true);
Object value = fields[i].get(obj);
map.put(name, value);
}
}
System.out.println("Return on object is ::::--> " + map.get("selectorCollection").toString());
return (String) map.get("selectorCollection");
}
并调用上面的程序getFieldNamesAndValues(Testobject, false)
而不是这样做String locator= object.findPropertyValue('xpath');
第二个问题:我无法使用代码 WebDriver driver = DriverFactory.getWebDriver();
获取 webdriver 实例
对于第 2 期:将 DriverFactory.getWebDriver() 实例从 Katalon studio 传递到 java,就像这样
//Wait for element till present upto 10 sec.
WaitForObject.waitTillObjectPresent'(DriverFactory.getWebDriver() , findTestObject('V3-Web/WaitForObject/Page_Livtten/button_Results'), 10)
我想为 "customize wait" 功能创建第 3 方 jar 文件,它将在 Katalon studio 测试用例中进一步使用,通过调用 "waitTillObjectPresent()" 来同步测试用例。
我从 Katalon Studio 调用函数的示例如下所示:
在这里,我试图从 Katalon Studio 调用 java 函数 "waitTillObjectPresent()"。
WebUI.navigateToUrl('https://www.companysite.com/en')
//Wait for element till present upto 10 sec.
WaitForObject.waitTillObjectPresent'(findTestObject('V3-Web/WaitForObject/Page_Livtten/button_Results'), 10)
WebUI.click(findTestObject('V3-Web/WaitForObjectDemo/Pagetten/button_Results'))
注意:在上面的代码中 "WaitForObject" 是我的 Java Class 而 "waitTillObjectPresent" 是相同的 class.[=13= 中的流畅等待方法]
尝试使用以下 java 代码:
public void waitTillObjectPresent(TestObject to, int waitingtime){
// HERE IS ISSUE, I am not getting TestObject from Katalon Studio calling method
int counter=0;
String locator= object.findPropertyValue('xpath');
System.out.println("xpath is:: " + locator);
WebDriver driver = DriverFactory.getWebDriver();
// HERE IS ISSUE, I am not able to getting WebDriver instance from Katalon Studio
// fluent wait method
Wait wait = new FluentWait(driver )
.withTimeout(waitingtime, TimeUnit.SECONDS)
.pollingEvery(1000, TimeUnit.MILLISECONDS)
.ignoring(WebElementNotFoundException.class)
WebElement ele = (WebElement) wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
counter ++
return driver.findElement(By.xpath(locator));
}
});
System.out.println("Waiting time for Object ::: "+ object+" ::: rendering is :::: " +counter*700 +" ::: miliseconds ie in seconds ::: " +(counter*700)/1000);
}
}
在上面的代码中,我在 2 点出现了错误:
第一个问题:我没有从 Katalon 工作室的 java 程序中获取 TestObject。
第二个问题:我无法使用代码 WebDriver driver = DriverFactory.getWebDriver();
请帮助我,我是 Katalon 工作室的新手。
这是最佳解决方案:
第一个问题:我没有从 Katalon 工作室的 java 程序中获取 TestObject。
对于上述问题,您不能像这样收集对象的值String locator= object.findPropertyValue('xpath');
您需要像这样从对象中获取值
public static String getFieldNamesAndValues(final Object obj, boolean publicOnly)
throws IllegalArgumentException, IllegalAccessException {
Class<? extends Object> c1 = obj.getClass();
System.out.println("Class value is c1:::" + c1);
Map<String, Object> map = new HashMap<String, Object>();
Field[] fields = c1.getDeclaredFields();
System.out.println("Fields in objects :: " + fields.toString());
System.out.println("Xpath Before for loop::: " + fields.getClass());
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
System.out.println("Fields name ::: " + name);
if (publicOnly) {
if (Modifier.isPublic(fields[i].getModifiers())) {
Object value = fields[i].get(obj);
map.put(name, value);
}
} else {
fields[i].setAccessible(true);
Object value = fields[i].get(obj);
map.put(name, value);
}
}
System.out.println("Return on object is ::::--> " + map.get("selectorCollection").toString());
return (String) map.get("selectorCollection");
}
并调用上面的程序getFieldNamesAndValues(Testobject, false)
而不是这样做String locator= object.findPropertyValue('xpath');
第二个问题:我无法使用代码 WebDriver driver = DriverFactory.getWebDriver();
获取 webdriver 实例对于第 2 期:将 DriverFactory.getWebDriver() 实例从 Katalon studio 传递到 java,就像这样
//Wait for element till present upto 10 sec.
WaitForObject.waitTillObjectPresent'(DriverFactory.getWebDriver() , findTestObject('V3-Web/WaitForObject/Page_Livtten/button_Results'), 10)