Search code examples
xpathcasperjsbackstop.js

CasperJS waitUntilVisible by Xpath


Just started working with CasperJS, writing a few sample tests. Everything works fine when using CSS Selectors, however I'm having trouble using Xpath. The only reason I want to use xpath is to create a more resilient locator, i.e.

'//a[text()="Office Building"]' versus the css version: #content > div > div > div > div:nth-child(1) > a

Here's what I've tried (Note: I have tested this xpath in the browser console):

Tried passing directly

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

Tried specifying the locator explicitly as Xpath:

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

And tried requiring the helper selectXPath from the module as documented here:

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

All of these result in a timeout error Wait timeout of 30000ms expired, exiting. because the element is never "found". Any ideas?


Solution

  • This could be a solution if you are only got text as identifier for waiting and clicking a link in casperjs without using xPath.
    It's more simple to wait for the text and then use clickLabel (if the text is unique):

    casper.start('http://yourTestUrl.com');
    
    casper.then(function() {
        casper.waitForText('Office Building');
    });
    
    casper.then(function() {
        casper.clickLabel('Office Building');
    });
    
    casper.run();