2017-02-07 2 views
1

Я хочу выбрать кнопку с casperjs, но моя проблема в том, что кнопка меняет IDs и classes. Я могу только «идентифицировать» кнопку, основываясь на тексте span 2 уровней сделано:Выбрать кнопку с jQuery для casperjs

<button class="changes-always" id="changes-always-too"> 
    <div class="changes-always2"> 
     <span class="changes-always3">Same text</span> 
    </div> 
</button> 

С JQuery я могу выбрать button, сначала выбрав span, потому что он всегда имеет то же содержание.

var span = $('span:contains("Same text")'); 
var button = span.parent().parent() // there is probably a nice way to do this 

Я получил JQuery загружен casperjs, включив его в качестве clientScripts, мой вопрос заключается в том, чтобы правильно получить его работу с evaluate(function(), а также использовать переменные в качестве селекторов с casperjs (если это вообще возможно)

Вот как далеко я получил, но потом у меня возникли проблемы с object и string вопросами.

casper.then(function() { 
    var items = this.evaluate(function() { 
     return $('span:contains("Some text")'); 
    }); 
    console.log(items); 
}); 

Было бы здорово, если бы кто-то может мне точку в правильном направлении, как использовать jQuery в качестве селектора, а затем пусть casperjs использовать его. Спасибо много раз заранее!

+1

Ваш подход должен работать. Что вам нужно сделать с этой кнопкой? Что мешает? – Vaviloff

+0

Мне нужно нажать кнопку, но не знаю, как это сделать или, скорее, передать ее в casperjs. – Max

ответ

1

Вы также можете использовать clickLabel(), если текст уникален.

casper.clickLabel("Some text"); 

Это должно работать и для кнопок.

Другой вариант, и до сих пор не с JQuery должны получать идентификаторы по тексту, и если иногда есть тот же самый текст, захватите их с помощью индекса:

... 
var x = require('casper').selectXPath; 
var buttonIDs; 
// get button ID's with specific text by getElementsAttribute with xPath selector 
buttonIDs = casper.getElementsAttribute(x("//button[contains(text(),'Some specific text')]"), 'id'); 
casper.then(function() { 
    casper.echo(buttonIDs); 
}); 
casper.then(function() { 
    casper.click("button[id='" + buttonIDs[0] + "']"); 
}); 

... 
+0

Работает, но точно так же, как вы сказали, только если он уникален. Не работает, если есть более селектор с той же меткой. – Max

+1

Я обновил ответ, добавил еще один вариант. Это все еще не с jquery, но я думаю, что это необязательно для решения вашей проблемы. ;) – dasmelch

Смежные вопросы