Cucumber и jstree

#jquery #ruby-on-rails #cucumber #capybara #jstree

#jquery #ruby-на-рельсах #cucumber #капибара #jstree

Вопрос:

Я создаю приложение rails, в котором есть страница с объектом jstree, и использую cucumber для моего интеграционного тестирования. Однако я разочарован, потому что я пытаюсь написать шаг cucumber (используя capybara / selenium для веб-драйвера), который щелкнет, чтобы развернуть один из узлов jstree. Я, хоть убей, не могу понять, как это сделать! Выполнение ‘click’ на объекте jstree-icon со знаком плюс / минус в нем ничего не дает. Есть идеи?

ОБНОВЛЕНО: Вот пример дерева, настолько простого, насколько я могу это сделать, в котором есть дерево. http://jsfiddle.net/aV62w — теперь мне нужно имитировать щелчок по плюсу в папке узла B, чтобы развернуть его.

Комментарии:

1. Можно ли было бы предоставить jsfiddle. как работать с net ?

2. Отличная идея. Только что создал один, дайте мне знать, если вы можете что-нибудь придумать?

Ответ №1:

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

jQuery

 // toggle_node, or open_node, or close_node
$('#tree').jstree('toggle_node', '#node_b');
  

Скрипка: http://jsfiddle.net/aV62w/1 /

Комментарии:

1. Я пытался избежать этого решения, потому что оно на самом деле не в точности имитирует действия пользователя (т. Е. пользователь не запускает этот javascript, он щелкает значок), но я думаю, что это, вероятно, единственный выход. Спасибо!

Ответ №2:

Веб-драйвер html-модуля (на Java) поставляется с executeScript, который можно использовать на веб-этапе. Я сделал это для проекта Grails с cucumber (он использует groovy)

 Then(~"I open jstree folder "(.*)"") { String folderName ->
        js = """
           var obj = $('div.main a:contains("'   arguments[0]  '")').parent();
           var tree = obj.parents('div.jstree-0');
           tree.jstree('toggle_node',obj);
        """
        browser.executeScript(js,folderName)
        Thread.sleep(5000); // wait for ajax call, so next step will have tree loaded
}
  

Обратите внимание, что весь поиск и обход DOM выполняется в JS с помощью jQuery, и нет необходимости прикреплять идентификатор — навигацию, конечно, можно улучшить 🙂
Надеюсь, это поможет.

Комментарии:

1. только что понял, что лучше использовать ‘open_node’.