2016-10-19 7 views
7

Ich habe zwei Test. Der erste Test wird erfolgreich bestanden. Dann gibt es einen URL-Methodenaufruf im zweiten Test, aber es ändert nicht die URL im Browser.Zweiter Test ändert nicht URL

Die baseUrl in wdio.conf.js wird auf http://localhost/web/es/index.html#

Tests:

var assert = require('assert'); 

describe('user login ', function(){ 

    it('user login', function(){ 

     browser 
      .url('/system/login') 
      .setValue('[name="username"]','test') 
      .setValue('[name="password"]','test') 
      .click('=Potvrď');    

     assert(browser.waitUntil('=test test'));     
    }); 

    it('user form', function(){ 

     browser 
      .url('/user/form'); 
    }); 
}); 

Im ersten Test /System/login richtig geöffnet wird. Aber im zweiten Test ändert sich die URL nie zu /user/form

Ich beginne gerade mit webdriverio also bin ich etwas fehlt?

+1

Hinweis: Ihre Jasmin-Tests sollten expliziter sein. "Benutzeranmeldung - Benutzerformular" scheint in Ordnung für Sie * jetzt *, aber wird es in 6 Monaten oder für einen anderen Benutzer sein? – Alex

+0

@ user49126 Sind Sie zu einem Abschluss für Ihr WDIO-Problem gekommen? Ist das Prolem noch gültig und wenn ja, bitte Frage entsprechend den Antworten aktualisieren. Prost! – iamdanchiv

Antwort

0

Überprüfen Sie den Zustand in browser.waitUntil (...). Der erste Parameter ist eine Funktion gemäß http://webdriver.io/api/utility/waitUntil.html.

Auch das Hinzufügen eines Timeouts (3 Sekunden) hilft zu sehen, ob die Wartezeit erfolgreich war.

browser.waitUntil(function() { 
    return browser.getText('#some_id') === 'test test'; 
}, 3000, "Timeout!!"); 
0

Das ist, weil es nicht wirklich ein Test ist. Was testen Sie, wo sind Ihre Akzeptanzkriterien? Du hast dem Browser gesagt, dass er etwas tun soll und habe nicht gewartet, es zu überprüfen. Es ist im Grunde wie du gesagt hast: Selen, mach das und es ist mir egal, dass ich fertig bin, tschüss.

Was können Sie verwenden? Versuchen Sie es mit einer Pause: .pause(ms); geben Sie 10000 (10s) und visuell sehen, ob es sich ändert. Sie können auch eine zusätzliche hinzufügen: .getUrl() - um die URL nach der Zeit unter MS angegeben.

Alternativ (anstelle der oben genannten Dinge): Gibt es auf Ihrer neuen URL ein Element im DOM, das nicht im DOM auf der alten URL vorhanden ist? Wenn ja, fügen Sie am Ende:

.waitForExist(selector, ms); gibt 1000 unter ms, und stellen Sie sicher, dass Sie für dieses Element der rechten Wähler bekamen

Auf diese Weise Browser wartet darauf, dass das Element zu erscheinen.

0

Viel Zeit vergangen, seit @user49126 die Frage gestellt, aber da niemand sah tatsächlich, dass dies in der Tat ein Routing-Problem, hier ist meine Antwort:

Es sieht aus wie Sie eine schlechte verwenden baseUrl Wert. Sie müssen zurückgehen und seine Beschreibung erneut in der wdio.config.js Datei lesen. Jeder Wert, den Sie an die browser.url() Funktion übergeben, ist , die an Ihre baseURL gesendet wird.

In Ihrem Fall erstens Sie gehen zu http://localhost/web/es/index.html# + /System/login, die aufgrund der # und wahrscheinlich hinter dem Routing-Logik, auf eine gültige Route wertet richtig. Der zweite Test führt Sie sicher zu einer ungültigen Route. Um Ihr Problem vollständig zu isolieren, benötigen wir die Konsolenausgabe.

Hier ist das Setup ich das Debuggen verwendet:

wdio.config.js:

// Set a base URL in order to shorten url command calls. If your url parameter starts 
// with "/", then the base url gets PREPENDED. 
baseUrl: ' http://127.0.0.1:8303', 

Code:

describe("\nDebug routing issue", function() { 

it("\nShould verify the URL, click something, move on\n", function() { 
    return browser 
     .url('/product-page.html') 
     .getUrl() 
     .then(function(retURL) { 
      assert.include(retURL, "product-page", "Yeap! You're good!"); 
     }) 
     .waitUntil(function() { 
      return browser.isVisible("div.top-bar-right a"); 
     }, 3000, "\nLogin failed...") 
     .click('div.top-bar-right a') 
     // Casual 'pause' to witness the click 
     .pause('1000'); 
}); 

it("\nShould reload different URL and validate site routing\n", function() { 
    return browser 
     .url('/index.html') 
     .getUrl() 
     .then(function(retURL) { 
      assert.include(retURL, "index", "Yeap! You're good!"); 
     }) 
     // Casual 'pause' to witness the new route 
     .pause('1000') 
}); 

TL; DR: Stellen Sie nur sicher, dass Sie den richtigen Wert in derhaben 210 BaseUrl Variable. Ändern Sie in Ihrem Fall den baseUrl Wert zu http://localhost/.

Mein Vorschlag ist es, den Port, z. http://localhost:8303/, oder die IP Ihres Servers localhost insgesamt, da ich auch einige Probleme als einfach localhost verwendet.

PS: Keine der anderen Antworten berühren das eigentliche Problem des Benutzers. Leider habe ich keine Möglichkeit dies zu kommentieren. ('Nicht genug minera ... errrg, rep Punkte,' #feelsbadman)