Перейти к содержимому

vitorg

Регистрация: 01 ноя 2007
Offline Активность: 25 янв 2020 23:35
-----

#128934 Выбор из выпадающего списка

Написано vitorg 02 апреля 2014 - 09:18

Протестировал оба варианта на FF 28.0, среднее время поиска локатора составило 25 мс в обоих случаях (30 опытов на 100000 option'ах). Вы уверены, что на Opera использовали нативный XPath, какая версия? Думаю, что там далеко не всё так просто разворачивается и есть куча различных оптимизаций, работающих по-своему в каждом браузере, где-то будет быстрее один вариант, а где-то другой, ну и опять же от вёрстки всё сильно зависит.


  • 1


#128911 Выбор из выпадающего списка

Написано vitorg 01 апреля 2014 - 15:30

Абсолютно не очевидно - как и ваш ответ с соседней теме.
Покажите разницу между (//select[@id='country']/option)[1] и //select[@id='country']/option[1].
Могу подсказать что эти варианты отличаются как минимум производительностью, а первый вариант имеет достаточно "подводных камней".

Здесь скорее второй вариант имеет много подводных камней, т.к. выбирается всё множество для которого справедливо "//select[@id='country']/option[1]" - option является первым, и только счастливое стечение обстоятельств приводит к правильному выбору элемента. В то же время первый вариант достаточно однозначен.

 

Если же исходить из предположения, что документ гарантированно валиден, то конечно же не может быть второго select с id=country и в этом случае локаторы взаимозаменяемы, но всё-таки не эквивалентны. В варианте без скобок наложились слишком много удачных моментов благодаря которым он работает, но стоит шевельнуть немного вёрстку и такие конструкции чёрту ногу свернут если тот начнёт разбираться почему же не работает локатор.

 

Про производительность не могу ничего сказать однозначно, т.к. не сравнивал, но всё-таки подозреваю, что первый вариант (со скобками) должен быть более производительным, т.к. оперирует меньшими объёмами данных.


  • 1


#122005 Ожидание загрузки Ajax формы и элементов

Написано vitorg 23 сентября 2013 - 08:15

Вот здесь было примерно то, что вам нужно (но для Selenium 1.x): Selenium: ожидание завершения всех AJAX-запросов.
Второй ваш вариант правильный - возвращает количество активных AJAX-запросов.
  • 1


#114972 Selenium2 + JUnit. Проверка текущего времени

Написано vitorg 22 февраля 2013 - 14:51

Да, запоздание вполне возможно, в таком случае надо либо делать допущение о том, что у нас возможен лаг ±2 секунды, например, либо проверку делать через JS, здесь уже зависит от реализации на стороне сервера, в зависимости от неё надо искать решение.
  • 1


#114960 Проверка наличия watermark-а на картинке

Написано vitorg 22 февраля 2013 - 11:40

Да, если надо проверить именно наличие метки на картинке, то скачиваем тестом и анализируем уже средствами языка/доп. библиотек сами, Selenium в анализе картинки не поможет.
  • 1


#114959 Selenium2 + JUnit. Проверка текущего времени

Написано vitorg 22 февраля 2013 - 11:38

Время берём всегда с локального компьютера (где работает тест), переводим в необходимую временную зону с помощью Calendar, сравниваем с тем, что на странице.
  • 1


#114882 Selenium для автоматизации

Написано vitorg 20 февраля 2013 - 20:33

Wget/curl и cron всё-таки понадобятся :) Просто использовать их можно из Bash. Ну или их аналоги.
  • 1


#114871 Selenium для автоматизации

Написано vitorg 20 февраля 2013 - 15:29

Да, скорее всего получится обойтись Bash-скриптом.
  • 1


#95269 Изменилось значение атрибута href в Selenium-е после 2.0rc2

Написано vitorg 07 октября 2011 - 04:34

Это был баг, который, видимо, исправили, поищите в списке закрытых в последнее время. А вообще href в локаторах использовать нехорошо конечно.
  • 1


#93114 Работа с диалоговым окном браузера

Написано vitorg 24 августа 2011 - 11:05

Видимо, у вас Basic HTTP Authentication, попробуйте так: http://login:password@domain.
  • 1


#91403 долго выполняется тест в Selenium RC

Написано vitorg 18 июля 2011 - 14:19

Может у вас скорость (setSpeed в Java) в драйвере ненулевая?
  • 1


#91303 Помогите разобраца

Написано vitorg 15 июля 2011 - 08:26

Вам сначала надо разобраться с русским языком, а потом уже начинать с языками программирования. Я серьёзно.
Из того, что вы прикрепили ясно только одно - вы хотите, чтобы здесь вашу работу сделали за вас, правильно? Или есть какая-то конкретная проблема?
  • 1


#78352 Selenium Grid - как начать?

Написано vitorg 28 сентября 2010 - 09:27

1. Менять тесты не надо, надо просто написать этот ANT'овый скрипт и пользоваться им. В ANT'е это будет просто запуск Java-классов.
2. ANT и Selenium Grid никак не связаны между собой. Просто Selenium Grid для сборки и запуска использует ANT, команда запуска "launch-hub". Если интересны внутренности того как она работает, то можно посмотреть файлик GRID_HOME/build.xml.
3. Использование TestNG необязательно, можно взять любую другую запускалку, умеющую запускать тесты параллельно. Сам RC только выполняет уже запущенные тесты параллельно, но запускать их не умеет. Прежде чем использовать TestNG лучше 10 раз подумать, т.к. он кривоват и косоват, можно столкнуться с множеством трудноразрешимых проблем.
4. Исходники примеров есть в GRID_HOME/examples/java-testng/src/com/thoughtworks/selenium/grid/examples/java.
  • 1


#66686 Кавычки в XPath (HOWTO)

Написано vitorg 14 апреля 2009 - 11:01

Всем привет!

Вот предположим, что есть у нас такой XPath-локатор:

xpath=//td[text()='my simple string']

Всё вроде бы просто - ищет ячейку таблицы в которой есть текст: my simple string. Но что делать если текст, который надо найти содержит одинарные кавычки, вот такой: my 'apos' string? Не беда, можно обрамить его в двойные кавычки в XPath-локаторе вот так:

xpath=//td[text()="my 'apos' string"]

Всё прекрасно работает. Аналогично если текст содержит двойные кавычки, то обрамляем в одинарные.
Но что делать если текст содержит как одинарные так и двойные кавычки, например: my 'apos' and "quot" string? Первая мысль - от'escape'ить их обратным слешем, вот так:

xpath=//td[text()='my \'apos\' and "quot" string']

И тут мы обнаруживаем, что escape'инг в XPath не работает :( К сожалению это не только в Selenium'е так, так во всём XPath'е.
Как быть?
Можно использовать такое решение:

xpath=//td[text()=concat('my ',"'",'apos',"'",' and "quot" string')]

Т.е. мы всегда используем одинарные кавычки для обрамления, кроме самих одинарных кавычек, которые обрамляем двойными, а потом "склеиваем" строку. Теперь всё прекрасно работает.

Можно написать такой вот escape-метод для подобных случаев (Java):
/**
	 * Escapes the characters in a passed string to be suitable to pass to an XPath expression.
	 * <p/>
	 * Because there is no escape character in XPath string values, this method is not really escapes passed string, but
	 * transforms it using a little trick with XPath concatenation function.
	 * <p/>
	 * Algorithm is: <ol><li>If string is <code>null</code>, then <code>null</code> is returns.</li><li>If string
	 * doesn't contains "'" (apostrophe) character, then it returns as is, but quotes with "'" (apostrophe) character.
	 * For example: <code>abcd</code> string will be returned as <code>'abcd'</code>.</li><li>If string contains "'"
	 * (apostrophe) character, then it splits into string tokens and replaces with XPath <code>concat()</code> function.
	 * For example: <code>ab'cd'ef</code> string will be returned as <code>concat('ab',"'",'cd',"'",'ef')</code></li><ol>
	 *
	 * @param string String to escape.
	 * @return Escaped string.
	 */
	@Nullable
	public static String escapeXPath(@Nullable String string) {
		if (string == null) {
			return null;
		} else if (string.contains("'")) {
			StringBuilder sb = new StringBuilder();
			sb.append("concat('");

			for (int i = 0; i < string.length(); i++) {
				char ch = string.charAt(i);
				if ('\'' == ch) {
					sb.append("',\"").append(ch).append("\",'");
				} else {
					sb.append(ch);
				}
			}

			sb.append("')");
			return sb.toString();
		} else {
			return "'" + string + "'";
		}
	}

Конструктивная критика приветствуется :)
  • 3


#65736 Проверка XML с помощью Selenium?

Написано vitorg 06 марта 2009 - 15:49

Скорее всего и не увидит.
Просто получаем весь XML так:
String xml = selenium.getEval("if (!browserVersion.isIE) {"

					+ " if (this.browserbot.getCurrentWindow().document instanceof XMLDocument) {"

					+ "  new XMLSerializer().serializeToString(this.browserbot.getCurrentWindow().document);"

					+ " }"

					+ "} else {"

					+ " var xmlDocument = this.browserbot.getCurrentWindow().document.XMLDocument;"

					+ " if (xmlDocument != null) {xmlDocument.xml; }"

					+ "}");
А потом уже делаем с ним всё что захотим в самом тесте.
  • 1