我试图动态生成一个查询硒如下,但它没有工作:动态生成硒查询使用Java中的字符串
String Query = "By."+Selector+"("+Expression+")))";
element = wait.until(ExpectedConditions.elementToBeClickable(Query));
如何实现这一要求吗?
我试图动态生成一个查询硒如下,但它没有工作:动态生成硒查询使用Java中的字符串
String Query = "By."+Selector+"("+Expression+")))";
element = wait.until(ExpectedConditions.elementToBeClickable(Query));
如何实现这一要求吗?
根据documentation和您收到的错误,似乎并不存在elementToBeClickable
方法,它将字符串作为参数。
然而,检查By
文档,这似乎是您所使用的方法的输入参数之一,可以看到它们可以从字符串构造它。
总之,你的代码需要改变的东西,像这样:
String cssQuery = ... //You can construct the CSS query dynamically.
element = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(cssQuery)));
有意义。所以我只限于在By.cssSelector()中使用字符串参数,而不在elementToBeClickable()中使用。好的,会试一试。 – bpk
看起来像你想获得一个元素通过查询,使用选择和表达参数,然后通过结果来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);
}
}
看起来很漂亮... – bpk
你是什么意思它没有工作?它是否抛出异常?你有错误的价值吗?你有没有攻击邻国:)?还请为“选择器”和“表达式”提供值。 – npinti
:)我得到:即使在将值赋给变量之后,类型ExpectedConditions中的elementToBeClickable(By)方法也不适用于参数(String)'。 – bpk