第二次测试不改变 URL

Posted

技术标签:

【中文标题】第二次测试不改变 URL【英文标题】:Second test doesnt change URL 【发布时间】:2017-03-01 07:39:34 【问题描述】:

我有两个测试。第一次测试成功通过。然后在第二个测试中有一个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,所以我错过了什么吗?

【问题讨论】:

旁注:你的茉莉花测试应该更明确。 “用户登录 - 用户表单”现在对你来说似乎没问题,但它会在 6 个月后,还是其他用户? 我的独立 webdriverio 实验以类似的问题告终,即使我使用的是绝对 URL。使用 .reload().setViewportSize(...).url()...... .end() 对我有用,但我没有找到问题的根本原因。 【参考方案1】:

自从@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/,或者你的 localhost 服务器的 IP,因为我也遇到了一些问题,将它用作简单的 localhost。

PS:其他答案都没有触及用户遇到的真正问题。不幸的是,我无法对此发表评论/表示。 ('没有足够的 minera...errrg,rep points,'#feelsbadman

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

你可以使用什么? 尝试暂停一下: .pause(ms); 给它 10000 (10s) 并在视觉上查看它是否改变。 您还可以添加一个额外的: .getUrl() - 在 ms 规定的时间之后获取 URL。

或者(而不是上述内容): 在您的新 URL 上,DOM 中是否存在旧 URL 上的 DOM 中不存在的元素?如果是的话,添加到最后:

.waitForExist(selector, ms); 在 ms 下给它 1000,并确保您获得了该元素的正确选择器

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

【讨论】:

以上是关于第二次测试不改变 URL的主要内容,如果未能解决你的问题,请参考以下文章

《构建之法》第二次

源码+067(第二次)

软件测试第二次作业

RIGHT-BICEP测试第二次程序

RIGHT-BICEP测试第二次程序

RIGHT-BICEP测试第二次程序