У меня есть две разные формы в моем приложении, и загрузка входных данных формы может быть выполнена с использованием предопределенного шаблона, который доступен в пользовательском интерфейсе (т.е. значение входного текстового поля будет предварительно заполнено на основе выбора шаблона). Когда произойдет загрузка данных, рендеринг элемента не произойдет, и будет заполнено только значение поля ввода. Чтобы подтвердить загрузку данных, я использую ожидание, как показано ниже.
var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(60));
wait.Until(x => x.FindElement(By.XPath(Element1_FieldXPath)).GetAttribute("value").Length > 1);
В любой момент времени будет видна только форма Form1 или Form2. Итак, мне нужно подтвердить загрузку данных либо в 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 видна в пользовательском интерфейсе. Мне нужно решить вышеуказанную проблему с одиночным ожиданием вместо двойного ожидания.
Есть ли другой способ решить проблему с минимальным временем ожидания?
Пример HTML:
Form1 – поле 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>
Form2 – поле 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>