我试图按如下方式动态生成selenium查询,但它不起作用:
String Query = "By."+Selector+"("+Expression+")))";
element = wait.until(ExpectedConditions.elementToBeClickable(Query));
请问如何达到这个要求?
答案 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);
}
}