У меня была аналогичная проблема, когда мне нужно было определить, был ли вход в систему для нового пользователя (страница входа затем переходит на страницу условий и положений, а не прямо на домашнюю страницу).
Сначала я просто ждал, а затем протестировал вторую страницу, но это было просто болью, поэтому я придумал это.
Чтобы проверить результат с помощью этого:
var whichScreen = waitForEitherElementText(By.CssSelector(HeaderCssUsing), "HOME SCREEN", "home", terms.getHeaderLocator(), terms.headerText, "terms", driver, MAX_STALE_RETRIES);
if(whichScreen.Item1 && whichScreen.Item2 == "terms")
{
terms.aggreeToTerms();
}
Метод, который вызывает это:
protected Tuple<bool, string> waitForEitherElementText(By locator1, string expectedText1, string return1Ident,
By locator2, string expectedText2, string return2Ident, IWebDriver driver, int retries)
{
var retryCount = 0;
string returnText = "";
WebDriverWait explicitWait = new WebDriverWait(driver, TimeSpan.FromSeconds(globalWaitTime));
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(0.5));
while (retryCount < retries)
{
try
{
explicitWait.Until<bool>((d) =>
{
try
{
if (Equals(d.FindElement(locator1).Text, expectedText1)) { returnText = return1Ident; };
}
catch (NoSuchElementException)
{
if (Equals(d.FindElement(locator2).Text, expectedText2)) { returnText = return2Ident; };
}
return (returnText != "");
});
return Tuple.Create(true, returnText);
}
catch (StaleElementReferenceException e)
{
Console.Out.WriteLine(DateTime.UtcNow.ToLocalTime().ToString() +
":>>> -" + locator1.ToString() + " OR " + locator2.ToString() + "- <<< - " +
this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name +
" : " + e.Message);
retryCount++;
}
}
return Tuple.Create(false,"");
}
Явное ожидание до тех пор, пока не использует логическое значение, поэтому будет циклически повторяться в течение всего времени ожидания (у меня очень медленный тестовый сервер, поэтому я установил это значение на 60 секунд). неявное ожидание установлено на полсекунды, поэтому проверки элементов будут выполняться каждые полсекунды и повторяться до тех пор, пока не будет возвращено значение true или произойдет сбой. Я использую кортеж, чтобы определить, на каком экране я нахожусь, и в этом случае соглашаюсь с условиями, которые затем возвращают меня на мой обычный путь к странице.
person
gramdocmail
schedule
09.06.2014