Всем привет!
В сентябре мы успели зарелизить сразу две версии: Selenide 2.13 и 2.14. Функций там немного, но есть одна принципиально важная, с неё и начнём.
Быстрый метод $.setValue
Мы в Codeborne анализировали производительность тестов на реальных проектах и заметили, что самая медленная операция -
это не поиск по XPath, как многие думают, а заполнение текстовых полей. То есть функция $.setValue
(она же
WebElement.sendKeys
). Дело в том, что по умолчанию Selenium при заполнении поля эмулирует нажатия каждой отдельной
клавиши со всеми сопутствующими событиями: keyDown, keyUp и пр. - что делает метод sendKeys
относительно медленным.
Можно отключить генерацию событий, но тогда перестанет работать та функциональность, которая на них рассчитывает: автозаполнение, автопоиск и т.д.
Мы придумали следующее решение проблемы. Пусть в Selenide будет два разных метода: $.sendKeys
и $.setValue
.
Первый будет работать как Selenium по умолчанию, то есть медленно и с генерацией событий. Второй будет работать быстро,
устанавливая значение поля через JavaScript. Тогда автор теста сам сможет решить, какой из методов нужен в каждом отдельном случае.
В большинстве случаев можно использовать метод $.setValue
, ибо автопоисков не так-то много в сравнении с массой “обычных” полей.
На наших проектах использование быстрого метода $.setValue
дало заметную экономию примерно в 10%.
NB! Эта фича пока экспериментальная и включается флагом -Dselenide.fastSetValue=true
. По умолчанию она выключена, и
$.setValue
работает так же, как и $.sendKeys
.
Добавлен метод для проверки картинок $("img").isImage()
Метод $("img").isImage()
возвращает true
, если картинка корректно загрузилась. Вызывать метод можно только для элементов <img>
.
Пример использования можно подсмотреть в тесте ImageTest.
NB! Функция почему-то не работает в HtmlUnit.
Добавилась возможность писать поясняющее сообщение к проверкам (как в ассертах JUnit и TestNG)
Теперь ко всем should-методам можно приписать сообщение:
$("#kpp").shouldBe("У частных лиц КПП всегда пустой", empty);
В случае падения теста этот комментарий будет добавлен в сообщение об ошибке:
Element should be empty {By.id: kpp} because У частных лиц КПП всегда пустой
Element: '<input id="kpp">012973891263</input>'
Screenshot: file:/Users/andrei/projects/selenide/build/reports/tests/integration/SelenideMethodsTest/waitUntilMethodMayContainOptionalMessageThatIsPartOfErrorMessage/1411898416054.0.png
Timeout: 4 s.
Я не уверен, что эта фича сделана самым удобным образом. Поэтому жду ваших идей. Как, по-вашему, это можно было бы сделать лучше?
Может быть, например, такой вариант был бы удобнее?
$("#kpp").shouldBe(empty.because("У частных лиц КПП всегда пустой"));
Но тогда комментарий придётся дублировать, если хочется проверить разом несколько условий.
Есть ещё такой вариант:
$("#kpp").because("У частных лиц КПП всегда пустой").shouldBe(empty);
Ну, и меня смущает ещё слово “because” - ведь в разных ситуациях было бы удобнее вместо “because” использовать другие слова.
А что вы думаете?
Добавились врапперы be
и have
.
Теперь проверки можно писать ещё и так:
$("#username").should(have(text("Ivan")));
$("br").should(be(empty));
Это может быть полезно при использовании Selenide с фреймворками типа EasyB, которые тоже используют слова shouldBe
или shouldHave
для своих целей.
Обновились до Selenium 2.43.1.
Этого релиза Selenium WebDriver все очень ждали. Во-первых, из-за поддержки FireFox 32, а во-вторых, из-за нового драйвера для InternetExplorer.
Проблем с новым Selenium 2.43.1 замечено не было.
А что у вас новенького?
28.09.14