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