【问题标题】:Generate selenium query dynamically using a string in Java使用 Java 中的字符串动态生成 selenium 查询
【发布时间】:2015-08-20 08:51:49
【问题描述】:

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

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

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

请问如何实现这个要求?

【问题讨论】:

  • 什么意思?它抛出异常了吗?你得到错误的值了吗?您是否对邻国进行了核武器攻击:)?还请提供 SelectorExpression 的值。
  • :) 我得到:The method elementToBeClickable(By) in the type ExpectedConditions is not applicable for the arguments (String) 即使在为变量赋值之后。

标签: java selenium dynamic find element


【解决方案1】:

根据documentation 和您遇到的错误,似乎不存在将字符串作为参数的elementToBeClickable 方法。

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

简而言之,您的代码需要更改为如下内容:

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

【讨论】:

  • 有道理。所以我只能在 By.cssSelector() 中使用字符串参数,而不能在 elementToBeClickable() 中使用。好的,试试看。
【解决方案2】:

看起来您想通过查询获取元素,使用 selectorexpression 参数,然后将结果传递给 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);
    }
}

【讨论】:

    猜你喜欢
    • 2010-12-30
    • 2017-03-21
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多