1

私が開発している受け入れテスト スイート (スタックの一番上に mocha、sinon、chai を配置) では、phantomjs にページをロードし、Web で入手可能な例に従ってあらゆる種類の操作を実行できます。

私を逃す唯一のことは、ページの起動中に生成された JS 変数の取得です。変数appをテストできないのにテストできることを示す完全な例をここに示しますjQuery

2 つの唯一の違いはapp$(document).ready(function() {... create var app ...})

私が得るエラーはmaximum call stack exceeded(?!?!?!?)

これが利用可能な場合、アプリのチェックを実行するにはどうすればよいですか? 多分約束を使っている何か?はっきり見えません(**)。

エラースタックは次のとおりです。

19:29:02.918 INFO [14] org.openqa.selenium.remote.server.DriverServlet - Executing: [execute script: return app, []] at URL: /session/73437950-3c14-4392-81ed-c6bd83c3f3fb/execute)
19:29:06.481 WARN [14] org.openqa.selenium.remote.server.DriverServlet - Exception thrown
org.openqa.selenium.WebDriverException: {"errorMessage":"Maximum call stack size exceeded.","request":{"headers":{"Accept":"application/json, image/png","Connection":"Keep-Alive","Content-Length":"33","Content-Type":"application/json; charset=utf-8","Host":"localhost:1693"},"httpVersion":"1.1","method":"POST","post":"{\"args\":[],\"script\":\"return app\"}","url":"/execute","urlParsed":{"anchor":"","query":"","file":"execute","directory":"/","path":"/execute","relative":"/execute","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/execute","queryKey":{},"chunks":["execute"]},"urlOriginal":"/session/9ca480b0-3c34-11e4-b1c7-0d43d6ab90ff/execute"}}
Command duration or timeout: 3.56 seconds
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: 'vagrant-xxx-yyyy', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-60-generic', java.version: '1.7.0_65'
Session ID: 9ca480b0-3c34-11e4-b1c7-0d43d6ab90ff
Driver info: org.openqa.selenium.phantomjs.PhantomJSDriver
Capabilities [{platform=LINUX, acceptSslCerts=false, javascriptEnabled=true, browserName=phantomjs, rotatable=false, driverVersion=1.1.0, locationContextEnabled=false, version=1.9.7, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=false, browserConnectionEnabled=false, webStorageEnabled=false, nativeEvents=true, proxy={proxyType=direct}, applicationCacheEnabled=false, driverName=ghostdriver, takesScreenshot=true}]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

テストは次getTitleのとおりgetTagNameです。失敗します。getElementSizeexecute('return jQuery')execute('return app')

describe('AAA Test acceptance XXXXX', function(){
  var client = {}

  before(function(done) {
    client = webdriverjs.remote({
      desiredCapabilities: {
        browserName: 'phantomjs'
      },
    });
    client.init(done) // starts session and opens the browser
  });

  it('The merchant button',function(done){
    client.url('http://www.dev.xxxx.com/api/purchase/index.html')
    .getTitle(function(err,title){
      expect(err).to.be.null
      expect(title).to.have.string('Mobile Payment');
    })
    .getTagName('.merchant-div',function(err,tagName){
      expect(err).to.be.null
      expect(tagName).to.be.equal('div')
    })
    .getElementSize('#ms-input',function(err,size){
      expect(err).to.be.null
      expect(size.width).to.be.equal(184)
    })
    .execute('return jQuery', function(err,jquery) {
      expect(err).to.be.null
      expect(jquery).not.to.be.undefined
      expect(jquery).not.to.be.null
    })
    .execute('return app', function(err,appInstance) {
      expect(err).to.be.null
      expect(appInstance).not.to.be.undefined
      expect(appInstance).not.to.be.null
    })
    .call(done);
  })

  after(function(done) {
    client.end(done); // ends session and closes the browser
  })
});

(**) 私はすでにSelenium WebDriver JS - Explicit Waitの指示に従いましたが、エラーはObject #<WebdriverIO> has no method 'wait'(これは完全に理にかなっています...)

4

0 に答える 0