2013-10-11 2 views
0

Я тестирую приложение, в котором есть страница, на которой отображаются несколько различных фруктов. Мне нужно сузить их по весу. Отправка диапазона веса вызывает вызов AJAX, который вызывает индикатор загрузки, который охватывает всю страницу, пока вызов не будет успешно выполнен. Вот мой недостающий код:Как подождать, пока веб-элемент исчезнет?

public MyPageObject InputWeightRange(int weight, int range = 1000) 
     { 
      var page = PageFactory.InitElements<MyPageObject>(Driver); 
      var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); 
      wait.Until(driver => page._loadingIndicator.Displayed.Equals(false)); 
      _upperWeight 
       .SendKeys((weight + (range/2)).ToString(CultureInfo.InvariantCulture)); //CultureInfo declarations to keep ReSharper happy. 
      _lowerWeight.SendKeys((weight- (range/2)).ToString(CultureInfo.InvariantCulture)); 
      wait.Until(driver => page._loadingIndicator.Displayed.Equals(false)); 
      wait.Until(driver => page._submitButton.Enabled); 
      _submitButton.Click(); 
      wait.Until(driver => page._loadingIndicator.Displayed.Equals(false)); 
      return this; 
     } 

Обычно код работает. Я думаю, что иногда он не срабатывает при щелчке, потому что индикатор загрузки также запускается другими действиями, которые я выполняю на странице до этого. Как вы можете видеть, я использую WebDriverWait, но по какой-то причине это не работает. Я никогда в ручном тестировании не видел индикатор загрузки более полусекунды.

Фактическое исключение:

System.InvalidOperationException was unhandled by user code 
    Message=unknown error: Element is not clickable at point (1234, 400). Other element would receive the click: <div id="loadingIndicator" class="loadingIndicator" style="display: block;">...</div> 

EDIT: Обратите внимание, что элемент всегда присутствует в DOM, поэтому ожидание Enabled только приводит к исключениям WebDriverTimeout. Помимо того, что я забиваю свой код с помощью try/catch или thread.sleeps, как я могу проверить эту страницу в безопасности из-за исключений?

+0

Если индикатор загрузки имеет какой-либо атрибут высота/ширина, то попробуйте ожидая его нуля или размеров, когда он не покрывает полную страницу. – Akbar

+0

Это сделало это, спасибо. Не могли бы вы опубликовать это в качестве ответа, чтобы я мог дать вам кредит? – Paladin852

ответ

0

Если индикатор загрузки имеет какой-либо атрибут высота/ширина, а затем попытаться ждать его равным нулю или размеры, когда он не покрывает всю страницу

+0

Это было не совсем правильно, но это поставило меня на правильный путь; В результате я изменил атрибут loadIndicator.GetCssValue(). – Paladin852

Смежные вопросы