неявное ожидание и явное ожидание, не решающее проблему в Selenium Webdriver с Java - PullRequest
0 голосов
/ 28 ноября 2011

Я тестировал приложение, включающее несколько вызовов ajax, поэтому мне потребовалось условие ожидания, чтобы элементы присутствовали / были видны после выполнения вызова ajax. Я использовал оба метода implicitwait и explicitwait, но ни один из них, похоже, не работает для меня, поскольку одно или другое исключение генерируется следующим образом:

1.Не удается найти элемент

2.Элемент отключен и поэтому не может использоваться для действий

Неявное ожидание используется следующим образом:

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
WebElement we = driver.findElement(By.name("q"));

ПРОБЛЕМА: Когда я тестирую этот код, после открытия браузера он выдает исключение через 2 секунды.

Результат: сгенерировано исключение

Явное ожидание

WebDriverWait wait = new WebDriverWait(driver, /*seconds=*/3); 
WebElement element = wait.until(presenceOfElementLocated(By.name("q"));

ПРОБЛЕМА:

Когда я тестирую этот код, после открытия браузера он выдает исключение через 2 секунды

Результат: сгенерировано исключение.

Также используется visibilityOfElementLocated, но он не работает для меня.


Кто-нибудь сталкивался с этой проблемой или у кого-нибудь есть решение для этого ??

1 Ответ

0 голосов
/ 28 ноября 2011

Не могу сказать, что сталкивался с этой проблемой раньше, но я также написал свой собственный класс опроса DOM. Вот что я делаю.

private int Timer = 180;

private bool CheckForElement(WebDriver driver,string byType,string selector)
{
  bool elementFound = false;

  for (int i = Timer - 1; i > 0; i--)
   {
       if (!itemFound)
       {
          Thread.Sleep(1000); //sets the loop to check every second this can be done at a much faster or slower rate depending on your preferences
          if (byType.ToLower() == "id")
          {
           try{
               WebDriver element = driver.FindElement(By.Id(selector);
               if(element.Displayed)
               {
                   elementFound = true;
               }
           }
           catch {
               //Do Nothing Here as we don't need to handle the exception
           }
          }
          else if (byType.ToLower() == "tagname")
          {
           try{
               WebDriver element = driver.FindElement(By.TagName(selector);
               if(element.Displayed)
               {
                   elementFound = true;
               }
           }
           catch {
               //Do Nothing Here as we don't need to handle the exception
           }
          }
          else if (byType.ToLower() == "cssselector")
          {
           try{
               WebDriver element = driver.FindElement(By.cssSelector(selector);
               if(element.Displayed)
               {
                   elementFound = true;
               }
           }
           catch {
               //Do Nothing Here as we don't need to handle the exception
           }
          }
          else if (byType.ToLower() == "classname")
          {
           try{
               WebDriver element = driver.FindElement(By.ClassName(selector);
               if(element.Displayed)
               {
                   elementFound = true;
               }
           }
           catch {
               //Do Nothing Here as we don't need to handle the exception
           }
          }
      }
      else
      {
          i = 0; //stops the loop when the element is found
      }
   }

  return elementFound ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...