Как вызвать JavaScript из ChromeWebDriver и InternetExplorerWebDriver, когда цель находится в IFrame - PullRequest
0 голосов
/ 12 февраля 2011

Я использую Selenium 2b1 и получаю хорошие результаты за рулем Firefox (как MacOS, так и Windows). Мы хотели бы запустить те же тесты с IE и Chrome. После добавления нескольких обходных путей для ChromeDriver я обнаружил, что ChromeDriver и InternetExplorerDriver завершаются с ошибкой в ​​executeScript (), даже если скрипт возвращает «Hello!», После driver.switchTo (). Frame (canvasName). ChromeDriver сообщает, что «не было на странице, поэтому не удалось выполнить javascript», а InternetExplorerDriver сообщает «Ошибка JavaScript».

Вот код Groovy:

selenium.switchTo().frame(canvasName)

log.info("Canvas open.  Waiting for Game to load.");
waitFor(selenium, 30) {
    selenium.findElement(By.id("Game")).click()
}

waitFor(selenium, 30) {
    def eval = null
    try {
        eval = selenium.executeScript("return document.URL")
        log.fine("executeScript returns [$eval]")
    } catch(Exception e) {
        log.fine("Exception from executeScript: $e.message")
    }
    return eval
}

Переменная selenium имеет экземпляр RemoteWebDriver. Метод waitFor создает экземпляр WebDriverWait и передает экземпляр оболочки, ссылаясь на параметр closure в качестве параметра till. Обратите внимание, что элемент с идентификатором «Game» существует только в IFrame, который был выбран первым оператором в приведенном выше коде.

Надеюсь, у кого-то есть опыт с этим!

1 Ответ

0 голосов
/ 19 февраля 2011

Проблема заключается в ограничениях версий InternetExplorerDriver и ChromeDriver в Selenium 2.0b1.Релиз Selenium 2.0b2 включает улучшенный InternetExplorerDriver, который поддерживает переключение на IFrame и запуск JavaScript на его DOM.Более надежный ChromeDriver еще впереди.К сожалению, в объявлении Beta 2 не упоминается о планах ChromeDriver (или о возможности поддержки Safari).

...