Автоматизирую тест, который должен прогоняться и в 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?
Оператор is вам точно не нужен.
Информацию об используемом типе браузера можно вытянуть из экземпляра вебрайвера, доступного в классах пейджей или степов. Есть метод getDriver(), который возращает объект класса WebDriverFacade, у которого есть подходящий метод getDriverClass(), который мы и можем использовать:
Этот код даст вам полное название класса, экземпляр которого вы используете сейчас для работы с браузером. В случае ИЕ получите что-то типа “org.openqa.selenium.ie.InternetExplorerDriver”. Можете использовать getSimpleName() - он вернет просто название класса (“InternetExplorerDriver”), без пути с пакетами.
Но я бы не рекомендовал добавлять признаки исскусственного интеллекта в код (если ИЕ - то ждем, если нормальный браузер - то ищем) - это вылезет вам (или вашим последователям) при поддержке и использовании тестов. Лучше сделайте несколько конфигурационных файлов (ссылку на параметры и где размещать этот файл я вам сбрасывал в другой теме) - отдельный для ИЕ, отдельный для нормальных браузеров и используйте. В конфиге для ИЕ просто поставьте таймауты на ожидание нахождения элементов достаточно большими.
Спасибо огромное!
Мне тоже не нравится такой способ установки таймаутов, но с конфигурационными файлами я пока совсем не сильна, а решение, как обычно, требуется “now”… К тому же мне надо придумать способ, как с нормальными браузерами сделать таймауты с использованием waitForRenderedElement, а в ИЕ хардкорно прописать паузы и время ожидания…