Pull to refresh

Comments 33

А селениды — это соединения селена с другими элементами.
Да только большинство программистов прочтут Selenide не как селениды, а как Selen IDE.
ИМХО.
Молодцы, парни!

Насколько я понял, пока реализовано только соединение с JUnit, планируете сделать варианты с другими тестовыми фреймворками?
Спасибо!
На самом деле логика работы Selenide напрямую с JUnit не связана. Её можно использовать и с любыми другими фреймворками, ничего не мешает. Мы же использовали с ScalaTest, например. Едиственное, что Selenide в случае падения теста выкидывает org.junit.Assert#fail, то есть всё-такие требует наличия JUnit в classpath. Но это вроде не должно создавать проблем.
Я имею в виду, что в дополнение к TestWatcher'у, который снимает скриншоты, было бы хорошо сделать аналоги для других тестовых фреймворков.
А, да, конечно, такие планы есть.
Для TestNG можем и сами сделать, а сколько ещё этих фреймворков?
Проще всего будет, если каждый, кому это надо, сделает Pull Request для поддержки своего любимго фреймворка.
Интересный проект!
А не сталкивались ли вы с проблемой тестирования загрузки файлов?
Вот тут действительно кроссбраузерная реализация одной функцией пригодилась бы!
Вопрос не в бровь, а в глаз.
Загрузка файлов — это геморрой тот ещё. В самом Selenium нет такой функциональности. Насколько я понимаю, совсем уж кроссбраузерной реализации пока не может быть, во всех браузерах это по-любому будет реализовано по-разному.

У нас есть опыт, когда мы подкюлчали в проект ещё и AutoIT и с помощью него делали загрузку файлов. Но это всё так сложно и ненадёжно, что в Selenide я решил пока это не включать. Загрузку файлов тестируем пока вручную. :(
Рекомендую ознакомиться вот с этой статьёй: How To Download Files With Selenium And Why You Shouldn’t, в ней обсуждаются различные варианты решения этой задачи.

Я иногда использую ещё один подход, не описанный в этой статье — прокси между браузером и тестируемым приложением, который перехватывает запросы на загрузку файлов и сам их загружает, а в браузер отдаёт страничку «файл загружен, находится тут».
Кстати, да, спасибо за подсказку.
Я сделал как описано в этой статье. Теперь в Selenide есть метод download для скачивания файла:

File file = $("#download_button").download();
Сам бодался с селениумом очень долго. Почти весь код его тоже запроксировали, в основном, правда, использовали PageObject.
Понравилась Ваша обёртка над waitUntil, так держать, если ещё раз столкнусь, обязательно попробую Selenide
Селениум — морально устаревший инструмент. Попробуйте: Sahi, и пишите взрослые тесты без костылей. Очень советую
Бесплатный пакет покрывает потребности более чем полностью. Реализуется любая логика, поддерживаются циклы и тп. При небольшом умении и желании результаты тестов сыпятся на почту.

Поднимаются виртуалки, на них конфигурируется среда. И хоть по каждому коммиту гоняй тесты. Тесты можно писать на джаве, руби, питоне. Есть еще много всяких плюшек. Силениум нервно курит со своей дебильной ломоватостью и описанием действий в таблице через xslt. Они бы ещё в цсс выражали бы действия

И если перед вами стоит серьезная задача по тестированию серьезного проекта, то да, 500 за штуку. Для серьезной организации это не деньги.
Пожалуйста, если будут вопросы, пишите в личку, сориентирую как смогу)
Опа-опа. Какой ещё xslt? Какой ещё css?
Вы, наверное, путаете Selenium WebDriver с чем-то другим. В Selenium WebDriver как раз-таки тесты можно писать на джаве, руби, питоне.
Виртуалки поднимать с разными средами можно с помощью Jenkins или ещё чего-нибудь — одним словом, это не задача Selenium.
Про цсс — стёб.

Возможно, возможно, я давно пробовал Селениум в качестве средства тестирования, наверное мы говорим о разных вещах :(
Если учесть, что Selenium 2.0 (aka WebDriver) релизнулся впервые всего полтора года тому назад — сложно было его «давно пробовать», так что — наверняка о разных :)
Да, вы правы, это было около 3х лет назад. Тогда тесты на нём писались просто ужасно.
Судя по тому, как он реализован сейчас они много заимствовали у Sahi за это время)
Я понимаю, что Вам очень хочется похвалить Sahi? :)
Хороший инструмент, кто же спорит.
Но всё-таки расскажите, в чём состоят заимствования?
А в чём прикол-то? Половина описаного в 20 строк:
protected WebElement $(String selector) { return driver.findElement(By.cssSelector(selector)); } protected WebElement csswait(String selector) { return waitElement(By.cssSelector(selector)); } protected WebElement waitElement(final By selector) { return new WebDriverWait(driver, 10) .until(new ExpectedCondition<WebElement>() { public WebElement apply(WebDriver d) { return d.findElement(selector); } } ); }
Простите, не ожидал, что <code> не сработает.

	protected WebElement $(String selector) {
		return driver.findElement(By.cssSelector(selector));
	}
	
	protected WebElement csswait(String selector) {
		return waitElement(By.cssSelector(selector));
	}
	
	protected WebElement waitElement(final By selector) {
		return new WebDriverWait(driver, 10)
			.until(new ExpectedCondition<WebElement>() {
				public WebElement apply(WebDriver d) {
					return d.findElement(selector);
				}
			}
		);
	}
Ну так наш вариант гораздо короче. В этом и прикол.
Вы не поняли, это выдержка из базового класса, который предоставляет наследникам такие же возможности, как ваша библиотека.
Пример использования:

public class Users extends Base {
		
	@Test public void listsUsers() {
		$("a.users").click();
		assertEquals("Users", $wait("h1.user").getText());
		assertEquals("Users", driver.getTitle());
		assertEquals("All Users", $("#content h2").getText());
		$("#content .results #spaceList .result");
...

Так что это за базовый класс? Где его найти?
Вот в этом комментарии представлена немалая его часть. Обладая даже базовым знанием java всё остальное можно дописать, причём очень быстро. В чём прелесть описанной библиотеки относительно голого Selenium, я не ощутил.
Эээ… Так-то это можно про любую библиотеку сказать.
В том-то и прелесть, что этот код не надо дописывать. Зачем писать то, то уже написано?
Этот вопрос до сих пор задаёт себе John Resig, вспоминая Prototype.js.

Просто можно понадеятся на чужую библиотеку, но если работы на час или меньше, то проще написать. А когда уже всё написано самостоятельно, то переписывать весь код тестов под синтаксис новой библиотеки смысл есть только, если что-то радикально сильно улучшается.
В данном случае оба предположения не верны. Можно и написать подобное за час, и ничего радикально не улучшается.
Однако всё равно спасибо, что поделились. Синтаксис выглядит приятно.
Если такой код у вас уже написан, то конечно нет смысла переписывать.
Однако этот факт говорит о том, что библиотека востребована.

Одно предположение у вас неверно: код, который написан в библиотеке, всё-таки не написать за час без ошибок. И даже если написать, зачем каждый раз тратить этот час?

Насчёт «понадеяться»: поскольку исходный код открытый, вы можете сами его посмотреть и убедиться, что там примерно то же, что вы сами бы и написали, а стало быть, можно библиотеке доверять и не тратить в следующий раз своё время.
Как создать драйвер с определенным профилем через вашу обертку?
Можно даже несколькими способами.

Самое простое — создать свой объект WebDriver, какой душе угодно, и приказать Selenide его использовать:
WebDriverRunner.setWebDriver(myWebDriver).

Таким образом можно запускать Selenide вместе с уже существующими тестами, которые используют голый Selenium WebDriver или любой другой фреймворк.

Более продвинутый способ — запустить тесты с параметром "-Dbrowser=com.mycompany.CustomWebDriverProvider". Пример кода см. в Wiki: github.com/codeborne/selenide/wiki/How-Selenide-creates-WebDriver
Sign up to leave a comment.

Articles

Change theme settings