质量保证金 |失败时传递新定位器
QAF | Passing new locator on failure
在定位器故障期间,我想即时传递一个新生成的定位器。我知道 QAF 的内置多定位器策略,但在我的情况下,定位器可能会在 运行 期间发生变化,因此我不会在 运行.
之前获得新的定位器信息
对于 qaf 3.0.1,您可以在 QAFExtendedWebElement
中进行设置。最好的方法是使用元素监听器。例如
@Override
public void onFailure(QAFExtendedWebElement element, CommandTracker commandTracker) {
//By newBy = <do needful>;
element.setBy(newBy);
commandTracker.setRetry(true);
}
qaf 3.0.1b 发布,你可以试试
编辑:要处理查找元素失败,您可以使用驱动程序侦听器。例如:
private static final Map<String, Object> byToString = JSONUtil.toMap(
"{'ByCssSelector':'css selector','ByClassName':'class name','ByXPath':'xpath','ByPartialLinkText':'partial link text','ById':'id','ByLinkText':'link text','ByName':'name'}");
@Override
public void onFailure(QAFExtendedWebDriver driver, CommandTracker commandTracker) {
Map<String, Object> parameters = commandTracker.getParameters();
if (parameters != null && parameters.containsKey("using") && parameters.containsKey("value")) {
By actaulBy = LocatorUtil.getBy(String.format("%s=%s", parameters.get("using"), parameters.get("value")));
By newBy = <do the needful>
commandTracker.getParameters().putAll(toParams(newBy));
commandTracker.setRetry(true);
}
}
private static Map<String, String> toParams(By by) {
Map<String, String> map = new HashMap<String, String>();
String val = by.toString().split(":", 2)[1].trim();
map.put("using", byToString.get(by.getClass().getSimpleName()).toString());
map.put("value", val);
return map;
}
在定位器故障期间,我想即时传递一个新生成的定位器。我知道 QAF 的内置多定位器策略,但在我的情况下,定位器可能会在 运行 期间发生变化,因此我不会在 运行.
之前获得新的定位器信息对于 qaf 3.0.1,您可以在 QAFExtendedWebElement
中进行设置。最好的方法是使用元素监听器。例如
@Override
public void onFailure(QAFExtendedWebElement element, CommandTracker commandTracker) {
//By newBy = <do needful>;
element.setBy(newBy);
commandTracker.setRetry(true);
}
qaf 3.0.1b 发布,你可以试试
编辑:要处理查找元素失败,您可以使用驱动程序侦听器。例如:
private static final Map<String, Object> byToString = JSONUtil.toMap(
"{'ByCssSelector':'css selector','ByClassName':'class name','ByXPath':'xpath','ByPartialLinkText':'partial link text','ById':'id','ByLinkText':'link text','ByName':'name'}");
@Override
public void onFailure(QAFExtendedWebDriver driver, CommandTracker commandTracker) {
Map<String, Object> parameters = commandTracker.getParameters();
if (parameters != null && parameters.containsKey("using") && parameters.containsKey("value")) {
By actaulBy = LocatorUtil.getBy(String.format("%s=%s", parameters.get("using"), parameters.get("value")));
By newBy = <do the needful>
commandTracker.getParameters().putAll(toParams(newBy));
commandTracker.setRetry(true);
}
}
private static Map<String, String> toParams(By by) {
Map<String, String> map = new HashMap<String, String>();
String val = by.toString().split(":", 2)[1].trim();
map.put("using", byToString.get(by.getClass().getSimpleName()).toString());
map.put("value", val);
return map;
}