【问题标题】:Second test doesnt change URL第二次测试不改变 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() 对我有用,但我没有找到问题的根本原因。

标签: javascript webdriver-io


【解决方案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,并确保您获得了该元素的正确选择器

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-03
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 2021-02-15
        相关资源
        最近更新 更多