Selenium + Thucydides. Как узнать "имя" WebDriver'а

Автоматизирую тест, который должен прогоняться и в FF и в IE. Тестируемая страница сама по себе сложная, со своей спецификой, которую тоже надо учитывать…
Переопределение таймаута помогло для 30% случаев падений тестов в IE. В большинстве же своем приходится выставлять “костыли” в виде ожиданий waitABit от 1 до 7 секунд. Ожидания необходимы только для IE, в FF тест проходит замечательно и без них.
Кроме того, на методах аяксовых ожиданий (обычно что заданный элемент исчез со страницы) IE падает в 90% стучаев с сообщением о том, что элемент не найден (не найден потому, что пока IE и драйвер “думают” этот элемент действительно исчезает со страницы).

У меня возникла идея написать метод, в котором определять какой driver в данный момент тестирует приложение и в зависимости от этого выставлять паузу или использовать методы аякс-ожиданий.

что-то вроде

public void timeout(){
    if (driver = IExplorer) { //не работает в таком виде
        waitABit(5000);
    }
    else
    {
        waitForRenderedElements(By.xpath("xpath"));
    }
}

Как можно в Selenium+Thucydides определить, что driver = IExplorer?

IDE под рукой нет, но может что то вроде:

if (driver is InternetExplorerDriver)
{
//some code
}

Не работает…

Оператор is вам точно не нужен.
Информацию об используемом типе браузера можно вытянуть из экземпляра вебрайвера, доступного в классах пейджей или степов. Есть метод getDriver(), который возращает объект класса WebDriverFacade, у которого есть подходящий метод getDriverClass(), который мы и можем использовать:

((WebDriverFacade)driver).getDriverClass().getName()

Этот код даст вам полное название класса, экземпляр которого вы используете сейчас для работы с браузером. В случае ИЕ получите что-то типа “org.openqa.selenium.ie.InternetExplorerDriver”. Можете использовать getSimpleName() - он вернет просто название класса (“InternetExplorerDriver”), без пути с пакетами.

Но я бы не рекомендовал добавлять признаки исскусственного интеллекта в код (если ИЕ - то ждем, если нормальный браузер - то ищем) - это вылезет вам (или вашим последователям) при поддержке и использовании тестов. Лучше сделайте несколько конфигурационных файлов (ссылку на параметры и где размещать этот файл я вам сбрасывал в другой теме) - отдельный для ИЕ, отдельный для нормальных браузеров и используйте. В конфиге для ИЕ просто поставьте таймауты на ожидание нахождения элементов достаточно большими.

4 лайка

В java ключевое слово звучит как instanceof. Использовать так

if (someVar instanceof SomeClass) {
    doSomething();
}
3 лайка

Спасибо огромное!
Мне тоже не нравится такой способ установки таймаутов, но с конфигурационными файлами я пока совсем не сильна, а решение, как обычно, требуется “now”… К тому же мне надо придумать способ, как с нормальными браузерами сделать таймауты с использованием waitForRenderedElement, а в ИЕ хардкорно прописать паузы и время ожидания…