У меня есть две разные формы в моем приложении, и загрузку входных данных формы можно выполнить с помощью предварительно определенного шаблона, который доступен в пользовательском интерфейсе (т. Е. Значение поля ввода текста будет предварительно заполнено на основе выбора шаблона).Когда происходит загрузка данных, рендеринг элемента не произойдет, и будет заполнено только значение поля ввода.Чтобы подтвердить загрузку данных, я использую ожидание, как показано ниже:
var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(60));
wait.Until(x => x.FindElement(By.XPath(Element1_FieldXPath)).GetAttribute("value").Length > 1);
. В любой момент времени будет видна только одна Форма 1 или Форма 2.Итак, мне нужно подтвердить загрузку данных либо в Form1, либо в Form2.Итак, мне нужно написать общий метод для решения этой ситуации, и я столкнулся с приведенным ниже решением,
public bool IsDataLoadingCompleted()
{
var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(60));
try
{
wait.Until(x => x.FindElement(By.XPath(Form1_FieldXPath)).GetAttribute("value").Length > 1);
return true;
}
catch (TimeoutException)
{
try
{
wait.Until(x => x.FindElement(By.XPath(Form2_FieldXPath)).GetAttribute("value").Length > 1);
return true;
}
catch (TimeoutException)
{
return false;
}
}
}
В моем решении время ожидания в худшем случае составляет 120s
, когда форма 2 видна вUI.Мне нужно решить вышеупомянутую проблему с одним ожиданием вместо двойного ожидания.
Есть ли другой способ решить проблему с минимальным временем ожидания?
Пример HTML:
Форма 1 - Поле 1 HTML:
<div class="form-group field field-string">
<label class="control-label" for="root_employeeName">Employee name</label>
<input class="form-control" id="root_employeeName" label="Employee name" placeholder="" type="text" value="">
</div>
Форма 2 - Поле 1 HTML:
<div class="form-group field field-string">
<label class="control-label" for="root_employeeAddress">Employee Address</label>
<input class="form-control" id="root_employeeAddress" label="Employee Address" placeholder="" type="text" value="">
</div>