Огурец и jstree

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

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


person jasonpgignac    schedule 12.05.2011    source источник
comment
Можно ли предоставить jsfiddle.net для работы?   -  person Gary Green    schedule 12.05.2011
comment
Отличная идея. Только что создал, дайте мне знать, если вы можете что-нибудь придумать?   -  person jasonpgignac    schedule 12.05.2011


Ответы (2)


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

jQuery

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

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

person Gary Green    schedule 12.05.2011
comment
Я пытался избежать этого решения, потому что оно на самом деле не точно имитирует действия пользователя (т. е. пользователь не запускает этот javascript, он щелкает значок), но я думаю, что это, вероятно, единственный путь. Спасибо! - person jasonpgignac; 13.05.2011

Веб-драйвер html-модуля (на Java) поставляется с исполняемым скриптом, который можно использовать на веб-этапе. Я сделал это для проекта Grails с огурцом (он использует 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, и нет необходимости прикреплять идентификатор — навигацию, конечно, можно улучшить :) Надеюсь, это поможет.

person carlosayam    schedule 14.05.2012
comment
только что понял, что лучше использовать «open_node». - person carlosayam; 14.05.2012