我試圖動態生成一個查詢硒如下,但它沒有工作:動態生成硒查詢使用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