2017-01-13 2 views
2

J'ai commencé à travailler avec CasperJS en écrivant quelques exemples de tests. Tout fonctionne bien lorsque vous utilisez des sélecteurs CSS, mais j'ai du mal à utiliser Xpath. La seule raison pour laquelle je veux utiliser XPath est de créer un localisateur plus résiliente, à savoirCasperJS waitUntilVisible par Xpath

'//a[text()="Office Building"]' par rapport à la version css: #content > div > div > div > div:nth-child(1) > a

Voici ce que j'ai essayé (Note: Je l'ai testé ce XPath dans le navigateur console):

essayé passant directement

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

essayé spécifiant le localisateur explicitement comme Xpath:

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

Et essayé nécessitant l'aide selectXPath du module as documented here:

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

Tous ces résultats dans une erreur de délai d'attente Wait timeout of 30000ms expired, exiting. parce que l'élément est jamais « trouvé ». Des idées?

+0

Qu'en est-il du "contient" la version: '// un [contient (., "Office Building") ] '? – alecxe

+0

Une autre option serait casper.waitForText ('Office Building'). Le dernier exemple que vous avez écrit devrait fonctionner, mais mieux avec contient en cas d'espace. – dasmelch

+0

@alecxe wow vous êtes partout :) malheureusement même résultat. Je peux essayer quelques méthodes différentes, comme utiliser 'evaluate' pour entrer dans le DOM, et y forcer certaines choses directement – Gunderson

Répondre

1

Cela pourrait être une solution si vous avez seulement du texte comme identifiant pour attendre et cliquer sur un lien dans casperjs sans utiliser xPath.
Il est plus simple d'attendre que le texte, puis utiliser clickLabel (si le texte est unique):

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

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

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

casper.run();