Я использую Specflow/Selenium для автоматизации тестирования веб-приложения, над которым я работаю в среде ASP.Net. Большинство «нажатий кнопок» приводят к полной загрузке страницы. Я выполняю следующие строки кода для выполнения при нажатии такой кнопки, но это мерцающий фрагмент кода — иногда он находит элемент, а иногда терпит неудачу. Почему это?
public class CreateQuestionPOM : BasePOM
{
//Flickering find!
[FindsBy(How = How.XPath, Using = "//label[text()[contains(.,'True/False')]]")]
private IWebElement trueFalseOption;
[FindsBy(How = How.XPath, Using = "//a[@ct='Button' and @title='Next']")]
private IWebElement nextButton;
public CreateQuestionPOM(IWebDriver driver) : base(driver) { }
public void CreateTrueFalseQuestion()
{
trueFalseOption.Click();
nextButton.Click();
WebDriverWait wait = new WebDriverWait(GetDriver(), TimeSpan.FromSeconds(20));
wait.Until(driver1 => ((IJavaScriptExecutor)GetDriver()).ExecuteScript("return document.readyState").Equals("complete"));
}
}
Приведенная выше сигнатура метода аналогична всем нажатиям кнопок, происходящим на странице. Приведенный выше фрагмент кода вызывается после нажатия предыдущей кнопки. Метод очень похож на описанный выше — дождитесь, пока document.readystate
станет complete
. Но почему это мерцает так часто и какое рекомендуемое решение?
wait.Until
. - person PhD   schedule 02.10.2015