2017-02-07 8 views
1

casperjsのボタンを選択したいのですが、私の問題は、ボタンがIDsclassesのように変わっていることです。それは常に同じコンテンツを持っているので、私は、最初のspanを選択することで、buttonを選択することができますjQueryを使ってcasperjsのjQueryで選択ボタン

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

:私はのみ行わspan 2レベルのテキストに基づいて、ボタンを「特定」することができます。

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

私はjQueryのclientScriptsとしてそれを含めることによって、casperjsによってロードされてしまったが、私の問題は、(それも可能だ場合)が正しくevaluate(function()での作業それを得るだけでなく、casperjsとセレクタのような変数を使用する方法である

これは私が得たところですが、objectstringの問題が発生しました。誰かがセレクタとしてjQueryを使用する方法、正しい方向に私を指すし、その後casperjs、それを使ってみましょうことができれば

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

は、素晴らしいことです。事前に何度もありがとう!

+1

あなたのアプローチが動作するはずです。あなたはそのボタンで何をする必要がありますか?方法は何ですか? – Vaviloff

+0

私はボタンをクリックする必要がありますが、それを行うか、むしろそれをcasperjsに渡す方法はわかりません。 – Max

答えて

1

テキストが一意の場合は、clickLabel()を使用することもできます。

casper.clickLabel("Some text"); 

これはボタンにも有効です。

別のオプションとはまだありませんjQueryのテキストでIDを取得し、時には同じテキストがある場合は、インデックスによってそれらをつかむべきであると:

... 
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