Używam testów Selenium 2 (napisanych w języku C#), które wybierają wartości z kontrolki "select". Wybór powoduje powrót do serwera, który aktualizuje stan strony. W związku z tym wykonuję ręczne oczekiwanie (thread.sleep
) po wybraniu wartości, aby poczekać na zmianę strony. i działa dobrze z Thread.Sleep. Jednak Thread.Sleep
jest zły pomysł, aby korzystać z wielu powodów, więc kiedy wyjąć wszystkie moje Thread.Sleep
wiersza kodu, to wszystkie moje przypadki testowe rozpadnie i próbowałem WebDriverWait, pośrednio i wyraźny brak roboty i bardzo frustracjiWebDriverWait lub ImplicitlyWait or ExplictlyOd niczego nic nie działa
poniżej przykładowy kod, który próbowałem ....
// WebDriverWait
public IWebElement WaitForElement(By by)
{
// Tell webdriver to wait
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.PollingInterval = TimeSpan.FromSeconds(2);
wait.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(NoSuchFrameException));
wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException), typeof(StaleElementReferenceException));
IWebElement myWait = wait.Until(x => x.FindElement(by));
return myWait;
}
Tried to zbyt:
WebDriverWait wait = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(30), TimeSpan.FromMilliseconds(100));
// Pośrednio:
driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30));
// Explicit Wait:
IWebDriver driver = new FirefoxDriver();
driver.Url = "http://somedomain/url_that_delays_loading";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.Id("someDynamicElement"));
});
tak zrobiłem próbował, ale nie działa. –