2015-07-22 1 views
0

Я пытаюсь создать тестовый скрипт, который будет проходить через мой сайт, нажмите ссылку и откройте новую вкладку на другой сайт, заполните форму и отправьте ее обратно. оригинальный веб-сайт, однако каждый пример, на который я смотрел и пытался, не работает для меня. Страница запускается до тех пор, пока не откроется новое окно, а затем новое окно сидит там около 5 секунд, и все закрывается. Вот что я получил:Casperjs: Открыть новое окно/вкладка

var x = require('casper').selectXPath; 
casper.options.viewportSize = {width: 1920, height: 1075}; 
casper.on('page.error', function(msg, trace) { 
    this.echo('Error: ' + msg, 'ERROR'); 
    for(var i=0; i<trace.length; i++) { 
     var step = trace[i]; 
     this.echo(' ' + step.file + ' (line ' + step.line + ')', 'ERROR'); 
    } 
}); 

casper.test.begin('Resurrectio test', function(test) { 
    casper.start('https://mywebsite1/abc/default.asp'); 
    casper.waitForSelector("form[name=FormSize] input[name='a']", 
     function success() { 
      test.assertExists("form[name=FormSize] input[name='Nickname']"); 
      this.click("form[name=FormSize] input[name='Account']"); 
     }, 
     function fail() { 
      test.assertExists("form[name=FormSize] input[name='Nickname']"); 
    }); 
    casper.waitForSelector("input[name='Nickname']", 
     function success() { 
      this.sendKeys("input[name='Nickname']", "abcco40"); 
     }, 
     function fail() { 
      test.assertExists("input[name='Nickname']"); 
    }); 
    casper.waitForSelector("form[name=FormSize] input[name='Username']", 
     function success() { 
      test.assertExists("form[name=FormSize] input[name='Username']"); 
      this.click("form[name=FormSize] input[name='Username']"); 
     }, 
     function fail() { 
      test.assertExists("form[name=FormSize] input[name='Username']"); 
    }); 
    casper.waitForSelector("input[name='Username']", 
     function success() { 
      this.sendKeys("input[name='Username']", "k_csr"); 
     }, 
     function fail() { 
      test.assertExists("input[name='Username']"); 
    }); 
    casper.waitForSelector("form[name=FormSize] input[name='Password']", 
     function success() { 
      test.assertExists("form[name=FormSize] input[name='Password']"); 
      this.click("form[name=FormSize] input[name='Password']"); 
     }, 
     function fail() { 
      test.assertExists("form[name=FormSize] input[name='Password']"); 
    }); 
    casper.waitForSelector("input[name='Password']", 
     function success() { 
      this.sendKeys("input[name='Password']", "kcsr"); 
     }, 
     function fail() { 
      test.assertExists("input[name='Password']"); 
    }); 
    casper.waitForSelector("form[name=FormSize] input[type=submit][value='Logon']", 
     function success() { 
      test.assertExists("form[name=FormSize] input[type=submit][value='Logon']"); 
      this.click("form[name=FormSize] input[type=submit][value='Logon']"); 
     }, 
     function fail() { 
      test.assertExists("form[name=FormSize] input[type=submit][value='Logon']"); 
    }); 
    /* submit form */ 
    casper.waitForSelector(x("//a[normalize-space(text())='One Time Payment']"), 
     function success() { 
      test.assertExists(x("//a[normalize-space(text())='One Time Payment']")); 
      this.click(x("//a[normalize-space(text())='One Time Payment']")); 
     }, 
     function fail() { 
      test.assertExists(x("//a[normalize-space(text())='One Time Payment']")); 
    }); 
    casper.waitForPopup(/https:\/\/secondwebsite\/home\/three\.aspx/).withPopup(/https:\/\/secondwebsite\/home\/three\.aspx/, function(){ 
     popup.close(); 
    }); 

    casper.then(function() { 
    }); 

    /* submit form */ 
    casper.waitForSelector("form#aspnetForm input[type=button][value='Back']", 
     function success() { 
      test.assertExists("form#aspnetForm input[type=button][value='Back']"); 
      this.click("form#aspnetForm input[type=button][value='Back']"); 
     }, 
     function fail() { 
      test.assertExists("form#aspnetForm input[type=button][value='Back']"); 
    }); 
    casper.waitForSelector(x("//a[normalize-space(text())='Document Manager']"), 
     function success() { 
      test.assertExists(x("//a[normalize-space(text())='Document Manager']")); 
      this.click(x("//a[normalize-space(text())='Document Manager']")); 
     }, 
     function fail() { 
      test.assertExists(x("//a[normalize-space(text())='Document Manager']")); 
    }); 

    casper.run(function() {test.done();}); 
}); 
+0

Какая версия PhantomJS/slimerJS вы используете? Где определяется 'popup'? –

+0

phantom is 1.9.8 slimer is 0.9.6 Забыл удалить всплывающее окно, если я попробую любую другую команду, он просто игнорирует его, окно зависает, пока оно не сработает. Он даже не активирует следующие шаги. – Bojan

+1

Вы можете видеть, что подсветка синтаксиса имеет проблемы с URL-адресами окна. Вы пытались с правильными регулярными выражениями? '/ https: \/\/secondwebsite \ .tld \/home \/three \ .aspx /' Если это не поможет Пожалуйста, зарегистрируйтесь на 'resource.error',' page.error', 'remote.message' и события 'casper.page.onResourceTimeout' ([Пример] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf)). Возможно, есть ошибки. –

ответ

0

Необходимо удалить следующий код из основного потока и переместить его внутри с помощью функцииPopup. Также аргумент, переданный с помощью командыPopup, и waitForPopUp должен иметь выражения регулярных выражений, а не ссылки, что я еще не понял до этого. При передаче этих аргументов вам не нужно инкапсулировать их в кавычки, эта часть я не совсем понимаю, почему, но она хочет, чтобы аргумент был как чистое выражение регулярного выражения без кавычек.

casper.waitForSelector("form#aspnetForm input[type=button][value='Back']", 
     function success() { 
      test.assertExists("form#aspnetForm input[type=button][value='Back']"); 
      this.click("form#aspnetForm input[type=button][value='Back']"); 
     }, 
     function fail() { 
      test.assertExists("form#aspnetForm input[type=button][value='Back']"); 
    }); 

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

  • Нет связанных вопросов^_^