2013-07-06 3 views
0

Я использую Webdriver (без реализации IEDriver) 2.23 API на машине Windows 7 с JDK7 и JRE7. Сценарии тестирования работают нормально, как ожидалось, но когда я представил IEDriver, сценарий выходит из строя на странице, не могу нажать на сообщение об ошибке элемента, поскольку соответствующий элемент не отображается. Я дважды проверил с моим приложением для локатора. То же самое можно сделать без реализации IEDriver. Я попытался имитировать все типы кликов, включая контекстный щелчок по классу Action. Не использовать. Все типы кликов возвращают один и тот же результат. Любая помощь ?Реализация IEDriver не проходит тест

+0

Даже обновление до последней версии требует реализации IEDriver. Actaully Я пытаюсь это сделать. driver.findElement (By.xpath ("xpath")). Click(); является тревожным моментом в моем коде – Karthikeyan

+0

Попробуйте использовать SendKeys (Keys.ENTER) вместо метода click(). –

+0

@Sri, я попробовал все из них. Проблема в том, что сам элемент не виден. Это странно. Потому что то же самое работает без IEDriver. Кроме того, реализация IEDriver не влияет на все другие операции. Доступен только этот Элемент. – Karthikeyan

ответ

0

Наконец-то мне удалось щелкнуть вышеупомянутый Элемент с помощью следующего кода.

WebElement we = driver.findElement(By.name("Complete")); 
JavascriptExecutor executor = (JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", we); // common for all we 

Настоящий источник - here. Это может помочь кому-то.

+0

Хорошо, что он работает, но код не очень чистый. В моем случае у IEDriver нет проблем щелкнуть объекты WebElement. У меня есть некоторые идеи о том, что может произойти, и, вероятно, мы сможем получить лучшее решение для этого. Не могли бы вы рассказать мне, что произойдет, если вы запустите 'we.click()' напрямую. –

+0

@ Серхио Пелин, я согласен. Это тоже для меня характерно. Потому что я могу выполнять те же действия (CLick) с другими элементами. Это происходит только с этим элементом. Я не могу загрузить трассировку стека здесь. Точная ошибка: Невозможно щелкнуть элемент, поскольку он не отображается. – Karthikeyan

+0

@ Karthikeyan Ok. Еще два вопроса перед выступлением. 1: У вас есть некоторый возникающий элемент вокруг, например. говоря «Загрузка ...» или подобное? 2: Не могли бы вы вставить в свой код перед 'we.click()', строку для печати следующего значения 'we.isDisplayed()'? Скажите мне, если это «истина» или «ложь», а затем мы будем обходить это. –

0

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

boolean isElementDisplayed(final WebDriver driver, final WebElement element, final int timeoutInSeconds) { 
    try { 
     ExpectedCondition condition = new ExpectedCondition<Boolean>() { 
      @Override 
      public Boolean apply(final WebDriver webDriver) { 
       return element.isDisplayed(); 
      } 
     }; 

     Wait w = new WebDriverWait(driver, timeoutInSeconds); 
     w.until(condition); 
    } catch (Exception ex) { 
     //if you get here, it's because the element is not displayed after timeoutInSeconds 
     return false; 
    } 
    return true; 
} 

Используйте это так:

WebElement we = driver.findElement(By.name("Complete")); 

if (isElementDisplayed(driver, we, 30)) { 
    we.click(); 
} 

Это заставит ждать водителя (. 30 сек макс) до элемента мы становится видимым и то драйвер нажимает на него. Если он работает, то мое предположение правильно, и вы могли бы изменить метод:

void clickOn(final WebDriver driver, final WebElement element, final int timeoutInSeconds) { 
    try { 
     ExpectedCondition condition = new ExpectedCondition<Boolean>() { 
      @Override 
      public Boolean apply(final WebDriver webDriver) { 
       element.click(); 
       return true; 
      } 
     }; 

     Wait w = new WebDriverWait(driver, timeoutInSeconds); 
     w.until(condition); 
    } catch (Exception ex) { 
     //probably some kind of exception thrown here 
    } 
    return; 
} 

и использовать его вместо we.click(), как:

WebElement we = driver.findElement(By.name("Complete")); 
clickOn(driver, we, 30); 

Код выше является приблизительным, чтобы вы проверьте свою проблему быстрым и понятным образом, и, если вы закончите использовать ее, вы должны адаптировать ее к своей структуре кода. Такой код полезности никогда не должен появляться в ваших тестах. Ваш тестовый код должен быть чистым и одинаковым для всех сред (браузеры, версия, SO и т. Д.). Храните обходные пути отдельно, например. какой-то util упаковка.

Кроме того, подпись метода - «избыточный вес». Реструктурируя свой код использования, вы должны иметь возможность написать в своих тестах только следующее: clickOn(element).

Надеется, что это помогает;)

UPDATE На самом деле, с этими компонентами я никогда не столкнуться с подобной проблемой:

  1. selenium-server-standalone версия 2.32.0
  2. IEDriverServer_x64_2.30.1.exe
+0

К сожалению, 'isElementDisplayed (driver, we, 30)' всегда здесь false. Но 'System.out.println («Размер кнопки« + driver.findElements (By.name («Complete»)). Size()); это 1. – Karthikeyan

+0

@ Karthikeyan Ok. Возобновление того, что у нас есть: 1-Код работает с другими браузерами (по крайней мере, с FF); 2-С IE Selenium можно найти кнопку, но находит ее как не отображаемую (т. Е. Не кликабельную); 3 - Проблема связана не с медленностью IE, так как кнопка остается не отображаемой даже через 30 секунд. Не могли бы вы сделать следующее: 1-Изменить имя кнопки для чего-то менее общего (например, «MySeleniumButton»), чтобы просто убедиться, что Selenium находит этот, а не другой элемент; 2-Откройте приложение в IE, убедитесь, что вы можете нажать кнопку, а затем скопировать и опубликовать здесь код HTML-кода кнопки. –

+0

1.Но его не работает с FF тоже. 2.Да, он может его найти. Следовательно, System.out.println («Размер кнопки« + driver.findElements (By.name («Complete»)). Size()); is 1. У меня пока нет доступа к коду AUT. То же самое работает с селеном 2.23 (с выходом IEDriver) – Karthikeyan

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