首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在失败时传递新的定位器

在失败时传递新的定位器
EN

Stack Overflow用户
提问于 2021-09-24 20:53:32
回答 1查看 96关注 0票数 1

在定位器故障期间,我想动态传递一个新生成的定位器。我知道QAF的内置多个定位器策略,但在我的例子中,定位器可能会在运行期间发生变化,所以在运行之前我不会获得新的定位器信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-24 21:11:57

使用qaf 3.0.1,您可以在QAFExtendedWebElement中设置。最好的方法是使用元素侦听器。例如

代码语言:javascript
运行
复制
@Override
public void onFailure(QAFExtendedWebElement element, CommandTracker commandTracker) {
    //By newBy = <do needful>;
    element.setBy(newBy);
    commandTracker.setRetry(true);
}

qaf 3.0.1b已经发布,你可以试一试。

编辑:要处理查找元素失败,可以使用驱动程序侦听器。例如:

代码语言:javascript
运行
复制
   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;

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69320994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档