Frequently Asked Questions

XML2Selenium is well presented at the conferences and different events. People come to us with questions and very often those questions are just great. We would like to provide you the way to study what people are asking, and share our opinion about that.

How can I get html attribute value and use it in test?

If you want to get dom-element attribute, you should find this element by locator first, then use action=”getAttribute”. Additionally you should use attribute text=”attributeName”, where specify dom-element attribute you want to get. Also you should specify variable where attribute value saved using returnValueName="varName". Complete example looks like this:
<webelement id="someId" action="getAttribute" text=”disabled” returnValueName="someVar" /> to get disabled attribute value into someVar variable.

Could you advise how to develop? We do not want to run all tests all the time.

You can specify one concrete test-case to execute in you JUnit annotation @TestPath(paths = {"myTest.xml"}). This way you’ll execute all tests in this concrete test-case. If you want to execute only one test, you can specify ignore=”true” attribute for other tests.

We want to extract an username, password and login url from a large text field using RegExp. How to do it?

You can use JavaScript for this, there is full power JavaScript support in XML2Selenium. You can write JavaScript expressions in your tests using <script> tag when web-page opened. Groovy scripting is also supported.

What should I do if I can not find element?

  • You can look into log file what's happened.
  • Try your locator with <webelement action="isExists">.
  • You can also use javascript. You can use <script> tag in XML2Selenium tests.
  • Also you can use javascript console in you browser to test this element value.

It's better to use <webelement> or <field>, but in some unusual cases we can not avoid javascript.

How to reuse same frame, but change its specific elements for each concrete call?

We have this frame for looking up users:

  3. <!-- check we have at least one result displayed -->
  5. <!-- check count user after search -->

Now we want to reuse this frame, but with another user name. We can use as placeholder in this frame. This process described here http://www.xml2selenium.com/more-advanced-test-example-test-twitter/.

  3. When you want to call frame in test, do following:
  4. <!-- set the background of the page -->

How should we act if after clicking new page arises and makes start for Ajax request but we want to test something after this Ajax request will be finished? Just with <pause>?

Framework web element tags always wait while dom-element appears on web page. Ajax finish can be tracked using regular xml2selenium tags (webelement, field, button, etc.). There is no difference in testing ajax and regular web application. When you invoke <button id="someid">, framework waits while button with following id appears at web-page and then click it.Default timeout for waiting element is 10 seconds. If ajax loading takes more time that 10 seconds you can set larger timeout value. Your can use <defaultdelay> to change this default timeout.Also notice that <snapshot> and <snapshot> do not wait, <snapshot> saves html dom model which was constructed in the moment you call it. The same for <screenshot>.

Why I could’t use Thucydides? It is rather easy to teach QA using them? As a plus you could develop it by yourself and it provides nice reports

Thank you for interesting and information about one more framework, which we haven't looked. Though we always look in other frameworks features. Looking at this link http://www.thucydides.info/overview everybody can see what is Thucydides. We develop XML2Selenium not only because don't like teach programming to QA engineers. The main idea is a simple grammar, which can combine different plugins like in Apache Ant. Ant script developers can also develop custom tags.

If you make a first look to Thucydides, it seems to be a combination of JUnit + Concordion (ore Fitnesse) + Selenium/WebDriver. But programming tasks exist here. This framework combines histories, features, code steps, then it's possible to control situation. In our case reporting, bdd, and many other things are plugins which decide which things them need to do. A distinctive features of the XML2Selenium comparing to Thucydides are:
1) Possibility to develop tests on XML
2) Possibility to create and customize own reports (Though we think that it is also done in Thucydides)

The main advantage of XML2Selenium is that base building blocks (base operations with selenium/web driver) are already exist. Automation QA engineer don't spend time on that and may concentrate on tests business logic. Of course if we need to do primitive actions it's easier to implement them in java. But if we need to enter text in TinyMce (for example into 3 different versions) editor, here we see all power of XML2Selenium. You already have existing plugin in a format <tinymce ref="alreadyReferredEditor" type="${groovy expression e.g. textToTypeVar}"/>. Also you can use existing "include" where printing to TinyMce is already implemented.

Plugins and "includes" can be stored in Nexus repository. This feature gives possibility to exchange experience between automation QA engineers and make reusable components. Plugin feature divides software engineers, which develop plugins in java, and automation QA engineers, which develop test scripts as easy as possible.

Why not to use just CI Jenkins report? It shows which tests are failed, and then you could go to log file to check where exactly

Очень хороший вопрос, и в тему. Дело в том, что XML2Selenium имеет интеграцию с JUnit и позволяет транслировать бизнес-названия (тест кейсов, тестов) в терминологию Junit, то есть вы увидите даже на стандартной панели результатов не названия классов, пакетов, но понятную всем терминологию из области, которой вы занимаетесь.

Но дело в том, что в стандартном отчёте jenkins (в общем случае, junit) нет возможности сразу же перейти к артифактам для данного теста, и нет возможности обратиться ко всей возможной информации о запуске: различных логах (а они могут быть сложными), скинщотам, снепшотам (реальный html страницы со всеми артифактами), видео и т.д. Также, если вы работаете на голом Selenium/WebDriver, не всегда логи оптимизированы, и имеют то же наполнение, как стандартный output. Иногда вам необходимо получить доступ не только к информации об ошибке, но и узнать о контексте, в котором произошла ошибка. В данный момент в наших репортах (business report) для каждого теста создаётся отдельный лог файл, в который помещается вся необходимая информация.

Также из репортов есть доступ ко всем артифактам теста. Поддерживается облако тегов, фильтрация, всевозможные другие операции, которые ускоряют эффективность работы и управления такими тестами. Вы всегда можете в 1 месте получить всевозможную информацию, просмотреть исходный код теста.

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

Другим примером может послужить плагин, который накапливает статистику по разным запускам XML2Selenium, чтобы предоставлять smart отчёты, к примеру, показать статистику изменения покрытия документации проекта. Специальные атрибуты в тегах <test/>, <testcase/> @version, @coverage позволяют сообщать эту информацию в тестах, а руководители проектов имеют возможность понимать, какие тенденции есть в покрытии.

Вы можете на практике изучить то, как выглядят отчёты, воспользовавшись нашим демо аккаунтом.