2013-10-11 50 views
0

我正在测试一个应用程序,该应用程序有一个显示各种水果数量的页面。我需要按体重缩小它们。提交权重范围会触发AJAX调用,该调用会调出覆盖整个页面的加载指示符,直到调用成功返回。这里是我的失败代码:如何等待webelement消失?

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> 

编辑: 注意的元素总是存在于DOM,所以等待启用只是导致WebDriverTimeout例外。除了用try/catches或thread.sleeps乱抛我的代码外,我怎样才能从异常安全地测试这个页面呢?

+0

如果装载指示符具有任何高度/宽度属性,那么尝试等待它为零或尺寸不覆盖整个页面 – Akbar

+0

这样做,谢谢。你能把它作为答案发布,所以我可以给你信用吗? – Paladin852

回答

0

如果装载指示符具有任何高度/宽度属性,然后尝试等待它是零或尺寸当其不覆盖完整的页面

+0

这实际上并不正确,但它使我走上了正确的轨道;我最终在正在改变的属性上使用了loadingIndicator.GetCssValue()。 – Paladin852