Доброго времени суток, господа.
Допустим на странице есть кнопка:
Start
Есть ли какой-то способ сделать поиск этой кнопки зная только что на ней надпись “Start”?
В webriver + selenide это делается так
$$("html button").findBy(text("Start")).click
Большое спасибо!
Поиметь как решенный
Лучше сразу искать без листа и дополнительных внутренних поисков, так быстрее по скорости
$(byText("Start")).click()
или по XPath
$(byXpath("//button[contains(text(),'Start')]")).click()
В документации selenide приводят пример замены xpath такой конструкцией, которую я привел. Вот ссылка
По поводу скорости не замерял. Но на мой взгляд разницы большой нет.
Я не говорю что решение не рабочее, я сказал что оно не производительное, когда будет у вас много тестов, вы будете искать любую возможность оптимизировать тесты. В вашем примере идет 3 запроса к драйверу, в моем 2, чем их меньше тем лучше.
Selenium WebDriver — это в первую очередь набор библиотек для различных языков программирования. Эти библиотеки используются для отправки HTTP запросов драйверу (отсюда и название WebDriver), с помощью протокола JsonWireProtocol[5], в которых указано действие, которое должен совершить браузер в рамках текущей сессии.
Ну давайте будем честными перед самими собой:
Е2Е-тесты, которые выполняются в браузере, абсолютно всегда будут долгие. Тут суть не в том, чтобы уменьшать количество http-запросов, а просто не запускать браузер. Это реально способ ускорения тестов
А насчет ускорения тестов, которые уже идут в браузере - просто не используйте thread.sleep, а правильно используйте ожидания там, где это надо. Как по мне - это здраво, чем высчитывать количество http-запросов в драйвер
Когда уже все возможное сделано, и до такого доходит. Понятно что долгие, но всегда приятно сократить время прогона на 20-30%