2017-01-26 7 views
0

Ich automatisiere den UI-Test meiner Anwendung. In einigen Fällen möchte ich, dass mein Testskript den aktuellen Browser schließt und den nächsten Test durch Öffnen eines neuen Browsers ausführt. Das Problem ist, dass ich nicht herausfinden kann, wie man ein neues Browserfenster in intern öffnet. remote.get(URL) macht nicht das, was ich hier machen möchte. Kann mir bitte jemand helfen.Wie öffnet man ein neues Browserfenster in der internen js?

Ich habe meine Frage aktualisiert, um Code zu enthalten. Meine Frage ist jedoch ziemlich geradlinig. Wie öffne ich ein neues Browserfenster mit Intern von innen?. obwohl wenn Sie den Code sehen möchten bitte kommentieren, ich werde es aufschreiben. Danke.

 // in tests/functional/index.js 
define([ 
'intern!object', 
'intern/chai!assert', 
'Automation/ConfigFiles/dataurl', 
'Automation/pages/login/loginpage', 
'intern/dojo/node!fs', 
'intern/dojo/node!leadfoot/helpers/pollUntil' 
    ], function (registerSuite, assert, dataurl, LoginPage, fs, pollUntil) { 
registerSuite(function() { 
    var loginPage; 
    var values; 
    return { 
     setup: function() { 
      var data = fs.readFileSync(loginpage, 'utf8'); 
      json = JSON.parse(data); 
      values = json.values; 
      loginPage = new LoginPage(this.remote, json.locator); 
      return this.remote 
      .get(require.toUrl(json.locator.URL)).setFindTimeout(60000000000).sleep(5000) 
     }, 

     beforeEach:function() { 
      // here i want to open new window 

     }, 

     'valid loginname lands to password page':function() { 
      loginPage.submitLoginName(values.unamevalue); 
      loginPage.isPasswordPageDisplayed().then(function(isPasswordPageDisplayed) { 
       assert.true(isPasswordPageDisplayed, 'password page is not displayed, Invalid Login name'); 
      }) 
     }, 

     'successful login': function() { 
      loginPage 
       .login(values.unamevalue, values.pwdvalue) 
      loginPage.isLoginSuccess().then(function (loginSuccess) { 
       assert.isTrue(loginSuccess, 'Login Failed'); 
      }); 
     }, 
     afterEach: function() { 
      return this.remote.closeCurrentWindow() 
     } 
    }; 
    }); 
}); 
+0

Haben Sie 'window.open()' ausprobiert? – Feathercrown

+0

Ja, ich habe das versucht, aber ich bin mir nicht sicher, wie man "window" in Skript einbezieht, weil es "Fenster ist nicht definiert" Fehler gibt. – CodeBlooded

+0

Hmm ... kann hier nicht viel helfen, keine Internerfahrung: P – Feathercrown

Antwort

2

Sie können ein neues Fenster mit window.open öffnen. Der Trick ist, dass Sie diesen Befehl im Remote-Browser ausführen möchten. Intern (technisch Leadfoot) gibt Ihnen zwei Methoden, das auf this.remote zu tun: execute und executeAsync. Zum Beispiel, um einfach ein neues Fenster zu öffnen, könnten Sie tun:

this.remote.execute(function() { 
    window.open(); 
}) 

Sobald Sie ein neues Fenster geöffnet haben, müssen Sie sie wechseln mit ihr zu interagieren. Ein Skript könnte etwa so aussehen:

var windowHandles; 
this.remote 
    .getAllWindowHandles() 
    .then(function (handles) { 
     windowHandles = handles; 
    }) 
    .execute(function() { window.open() }) 
    .sleep(500) 
    .getAllWindowHandles() 
    .then(function (handles) { 
     // compare the new handles to windowHandles to figure out which 
     // is the new window, then switch to it 
     return this.remote.switchToWindow(newWindowHandle); 
    }) 

    .get('some_new_url') 
    // rest of test 
+0

Danke @ jason0x43 für die Antwort. Ihre Antwort öffnet grundsätzlich einen neuen Tab. Was ich machen möchte, ist anders als deine Antwort. Ich möchte: 1. den Browser schließen, wenn der erste Test ausgeführt wird (jetzt gibt es keinen Browser). 2. Öffnen Sie einen neuen Browser und führen Sie den nächsten Test aus. – CodeBlooded

+0

Wenn Sie das vorhandene Browserfenster schließen möchten, fügen Sie vor dem zweiten 'getAllWindowHandles' ein' closeCurrentWindow' hinzu. Ich hatte angenommen, dass Sie es für Debugging-Zwecke offen halten möchten. Um ein neues Register gegen ein neues Fenster zu öffnen, versuchen Sie, Fensterargumente wie 'window.open ('url', 'name', 'height = 500, width = 600')' 'anzugeben. – jason0x43

Verwandte Themen