使用Java中的字符串动态生成selenium查询

时间:2015-08-20 08:51:50

标签: java selenium dynamic find element

我试图按如下方式动态生成selenium查询,但它不起作用:

String Query = "By."+Selector+"("+Expression+")))";

element = wait.until(ExpectedConditions.elementToBeClickable(Query));

请问如何达到这个要求?

2 个答案:

答案 0 :(得分:0)

根据documentation以及您获得的错误,似乎不存在以字符串作为参数的elementToBeClickable方法。

然而,检查By文档,这似乎是您所使用的方法的输入参数之一,可以看到它们可以从字符串构造它。

简而言之,您的代码需要更改为:

String cssQuery = ... //You can construct the CSS query dynamically.
element = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(cssQuery)));

答案 1 :(得分:0)

您希望通过查询获取元素,使用选择器表达式参数,然后将结果传递给ExpectedConditions。 那你可能需要通用的方法吗?

像:

public By getSeleniumQuery(String selector, String expression){
    if(selector.equalsIgnoreCase("id")){
        return By.id(expression);
    }
    else if(selector.equalsIgnoreCase("name")){
        return By.name(expression);
    }
    else if(selector.equalsIgnoreCase("class")){
        return By.className(expression);
    }
    else if(selector.equalsIgnoreCase("css")){
        return By.cssSelector(expression);
    }
    else if(selector.equalsIgnoreCase("link")){
        return By.linkText(expression);
    }
    else if(selector.equalsIgnoreCase("partialLink")){
        return By.partialLinkText(expression);
    }
    else if(selector.equalsIgnoreCase("tag")){
        return By.tagName(expression);
    }
    else if(selector.equalsIgnoreCase("xpath")){
        return By.xpath(expression);
    }
    else{
        throw new IllegalArgumentException("Unknown selector - " + selector);
    }
}