2017-01-13 9 views
2

ちょうどCasperJSでいくつかのサンプルテストを書いて作業を始めました。 CSSセレクタを使用するとすべてうまく動作しますが、Xpathの使用に問題があります。私は、XPathを使用する唯一の理由は、より弾力性ロケータを作成することである、すなわちXパスによるCasperJS waitUntilVisible

'//a[text()="Office Building"]' CSSのバージョン対:私は、ブラウザでこのXPathをテストしている:#content > div > div > div > div:nth-child(1) > a

ここ(注意私はを試みたものですコンソール)

しようとした直接

casper.waitUntilVisible('//a[text()="Office Building"]'); 

渡すには、XPathとして明示的にロケータを指定しようとしました:

casper.waitUntilVisible({ 
    type: 'xpath', 
    path: '//a[text()="Office Building"]' 
}); 

とモジュールas documented hereからヘルパーselectXPathを必要としてみました:要素が「見つからない」んので

var x = require('casper').selectXPath; 
casper.waitUntilVisible(x('//a[text()="Office Building"]'))'; 

これらの結果のすべてのタイムアウトエラーWait timeout of 30000ms expired, exiting.インチ何か案は?

+0

何「が含まれる」バージョンについて: '// [含まれています(。、「オフィスビル」) ] '? – alecxe

+0

もう一つの選択肢はcasper.waitForText( 'オフィスビルディング')です。あなたが書いた最後の例はうまくいくはずですが、スペースの場合にはより良いものが含まれています。 – dasmelch

+0

@alecxeあなたはどこにいてもうわー:)残念ながら同じ結果。 DOMに入るために 'evaluate'を使うなど、いくつかの方法を試してみてください。 – Gunderson

答えて

1

これは、xPathを使用しないでcasperjsのリンクをクリックして待つための識別子としてのテキストしか得られない場合の解決策です。
それは、テキストを待ってから、(テキストが一意である場合)clickLabelを使用する方が簡単です:

casper.start('http://yourTestUrl.com'); 

casper.then(function() { 
    casper.waitForText('Office Building'); 
}); 

casper.then(function() { 
    casper.clickLabel('Office Building'); 
}); 

casper.run();