第二次测试不会改变URL

时间:2016-10-19 15:05:47

标签: javascript webdriver-io

我有两个测试。第一次测试成功通过。然后在第二个测试中有一个url方法调用,但它不会更改浏览器中的url。

wdio.conf.js中的baseUrl设置为http://localhost/web/es/index.html#

试验:

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');
    });
});

在第一次测试中, / system / login 正确打开。但在第二次测试中,网址永远不会更改为 / user / form

我刚从webdriverio开始,所以我错过了什么?

3 个答案:

答案 0 :(得分:0)

检查browser.waitUntil(...)上的条件。第一个参数是根据http://webdriver.io/api/utility/waitUntil.html的函数。

此外,添加超时(3秒)将有助于查看等待是否成功。

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

答案 1 :(得分:0)

那是因为它不是真正的考验。你在测试什么,你的验收标准在哪里?你告诉浏览器做了一些事情,并没有等到检查它。它基本上就像你说的那样:Selenium,做到这一点,我不在乎我已经完成了,再见。

你可以用什么? 试着暂停一下: .pause(ms); 给它10000(10s)并在视觉上看它是否改变。 你还可以添加一个额外的: .getUrl() - 在ms。

之后的时间之后获取URL

或者(代替上述内容): 在您的新URL上,DOM中的元素是否存在于旧URL上的DOM中?如果是这样,请添加到结尾:

.waitForExist(selector, ms); 在ms下给它1000,并确保你有一个正确的选择器

这样浏览器将等待该元素出现。

答案 2 :(得分:0)

@user49126提出问题以来已经过了很多时间,但由于没有人真正看到这实际上是路由问题,所以这是我的回答:

您似乎使用了错误的 baseUrl 值。您必须返回并重新阅读 wdio.config.js 文件中的说明。您传递给 browser.url()函数的任何值都将后添加 baseURL

在您的情况下,首先您要 http://localhost/web/es/index.html# + / system / login ,这是由于和可能是您的路由逻辑,正确评估有效路由。第二次测试肯定会带你到一条无效的路线。 为了完全隔离您的问题,我们需要控制台输出

以下是我用来调试它的设置:

<强> 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',

<强>代码:

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:只需确保 baseUrl 变量中的值正确。在您的情况下,将 baseUrl 值更改为 http://localhost/

我的建议是也使用端口,例如http://localhost:8303/,或者本地主机服务器的IP,因为我也遇到了一些使用它作为localhost的问题。

PS:其他答案都没有触及用户遇到的实际问题。不幸的是,我没有办法发表评论/发出信号。 ('不够我的......错误,代表点,'#feelsbadman