第二次测试不改变 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的主要内容,如果未能解决你的问题,请参考以下文章