我有一個Selenium Grid和WebDriver 2.48.2測試運行得太快。大部分時間測試停止,因爲在按下按鈕之前沒有選擇單選按鈕。硒測試運行速度太快,不等待單選按鈕被選中
單選按鈕使用基於JSON文件的JavaScript進行設置,以便在動態區段內創建任意數量的按鈕。一旦點擊繼續按鈕,該部分被銷燬,並且新的單選按鈕創建一個新的部分。
我嘗試了一個沒有成功的隱含等待。
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
對我來說唯一的解決方法是延遲時間讓單選按鈕有足夠的時間點擊。
driver.findElement(By.id("radiobuttonid")).click();
Thread.sleep(delay);
但在我看來這不是一個理想的解決方案,這是可能的延遲可能不夠長,或者它太長,浪費時間;可能有任何數量的單選按鈕,所以時間會呈指數增長。
我試過設置各種explicit waits與expected conditions不同,但沒有成功。
我試過等待單選按鈕被創建,因爲它可能不存在(presenceOfElementLocated
& elementToBeClickable
)。我試過等待它被選中(elementToBeSelected
)。
我很難找到預期的條件應該做什麼,因爲描述很簡短並且容易誤解。
理想情況下,我希望在單擊單選按鈕後立即繼續測試。如果可能的話,最好的辦法是什麼?
編輯
L.Bar的suggestion下面並沒有爲我工作,但它是非常有益的,以確定單選按鈕的存在,只是在不斷被點擊按鈕的單選按鈕有一個前被選中的機會。
EDIT 2
這僅僅是對耶利米正確答案擴大。我將代碼放入一個方法中,使其可重用。
private static Predicate<WebDriver> forceSelectionOfElement (final String id)
{
return new Predicate<WebDriver>()
{
@Override
public boolean apply(WebDriver arg0)
{
WebElement element = arg0.findElement(By.id(id));
boolean rval = element.isSelected();
if (!rval) {
element.click();
}
return rval;
}
};
}
使用
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(forceSelectionOfElement("q___01_02_01___1___a"));
記得導入這個命名空間,它花了我一個尷尬長的時間來弄清楚我進口錯了:)
import com.google.common.base.Predicate;
好問題。像這樣的事情可能是一個難以解決的問題。你在用什麼語言?它看起來像Java。請將相關的編程語言標記添加到問題中。單擊單選按鈕時會發生什麼變化?任何你可以檢測到的東西? – JeffC
@JeffC這是Java,我添加了標籤。單擊單選按鈕時沒有任何變化。點擊繼續按鈕後,它會在單選按鈕上執行操作,看看是否應該繼續下一部分。 – Pat
只是爲了使該函數更有用,你可以做forceSelectionOfElement(final By)而不是使用字符串參數(這樣你可以選擇xpath,id或者css) –