2015-12-21 3 views
0

Я пробовал много решений в Интернете, но каждый из них не работал в других случаях, я просто хочу подождать, пока элемент не появится на веб-странице, m используя selenium для C# две вещи, которые я пробовал, и двое из них генерируют исключение раз в то время, я просто не хочу получать исключение, я хочу, чтобы моя автоматизация ждала не менее 5 минут для веб-страницу для загрузки.Подождите не менее 5 минут, пока элемент не появится

public class WaitForElement 
    { 
     public void WaitFE(string Xpath,IWebDriver webDriver) 
     { 
      WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromMinutes(120)); 
      wait.Until(d => d.FindElement(By.XPath(Xpath)).Displayed); 
      //IWebElement category = wait.Until<IWebElement>((d) => 
      //{ 
      // return d.FindElement(By.XPath(Xpath)); 
      //}); 

     } 
    } 
+0

Ждете после загрузки страницы? – Venkatesh

ответ

3

Лучше всего было бы использовать Явный ждать, пока элемент вы найти не соответствует вашим требуемым условиям:

-wait для элемента существовать:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(5)); 
      wait.Until(ExpectedConditions.ElementExists(By.XPath(""))); 

-wait для элемент, чтобы быть видимым:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(5)); 
      wait.Until(ExpectedConditions.ElementIsVisible(By.XPath(""))); 

-wait для элемента, чтобы быть интерактивными

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(5)); 
      wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath(""))); 

Или что-нибудь еще, что вам нужно. И по настройкам TimeSpan здесь WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(5)); он будет ждать по умолчанию 5 минут (максимальное время для ожидаемого условия будет истинным).

Другое дело, что вы могли бы сделать, было бы использовать неявный ждать как максимум по умолчанию время загрузки для всех страниц:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromMinutes(5)); 
0

Я думаю, что я решил мою проблему, эта функция ожидания ждет примерно 2 минуты для элемента, чтобы появиться, может кто-нибудь сказать мне, если то, что я сделал это хорошо

public class WaitForElement 
    { 
     public int count = 0; 
     public void WaitFE(string Xpath,IWebDriver webDriver) 
     { 
      try 
      { 
       while (!(count < 10 && (webDriver.FindElement(By.XPath(Xpath)).Displayed))) 
       { 
        count = 0; 
        return; 
       } 
      } 

      catch 
      { 
       count++; 
       WaitFE(Xpath, webDriver); 
      } 

     }