我在尝试使用selenium-webdriverjs运行的测试脚本上单击或提交按钮时遇到问题。
我使用以下NPM模块:
填写表格后,我无法单击按钮进入仪表板。我突出显示了该按钮,但不会通过鼠标操作单击它。
如果有帮助,以下是一些屏幕截图(我在测试过程中手动将它们拍摄了):
在最后一张图片上,我想单击“登录”按钮,由于显示了预期的CSS效果,因此鼠标应悬停在其上,然后以某种方式前进至下一页。
这是我完整的测试脚本:
var driver = require('selenium-webdriver'),
chai = require('chai'),
expect = chai.expect;
chai.use(require('chai-as-promised'));
describe('Webdriver - Admin Page Tests - ', function() {
beforeEach(function() {
this.timeout(10000);
this.driver = new driver.Builder().withCapabilities(driver.Capabilities.firefox()).build();
return this.driver.get('https://admin.example.us/en-US/sign-in');
});
afterEach(function() {
return this.driver.quit();
});
describe('Login verification -', function() {
it('filling in credentials and accessing the portal', function () {
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(2) > input'
}).sendKeys('[email protected]');
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(3) > input'
}).sendKeys('example');
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(4) > input[type="checkbox"]'
}).click();
var formButton = this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(5) > button'
});
this.driver.actions()
.mouseMove(formButton)
.click()
.perform();
return expect(this.driver.getCurrentUrl()).to.eventually.equal('https://admin.example.us/en-US/dashboard');
});
});
});
这是我运行测试脚本时遇到的错误:
1) Webdriver PC6 - Admin Page Tests - Login verification - filling in credentials and accessing the portal:
AssertionError: expected 'https://admin.example.us/en-US/sign-in' to equal 'https://admin.example.us/en-US/dashboard'
+ expected - actual
-https://admin.example.us/en-US/sign-in
+https://admin.example.us/en-US/dashboard
上面的错误基本上确认了我的问题,即我无法正确单击登录按钮并前进到下一页。
这是登录表单的样子(我从中删除了样式和react-id):
<div>
<h2>
<span>Sign In</span>
<span></span>
<button type="button">
<div>
<span class="material-icons">help</span>
<span>help</span>
</div>
</button>
</h2>
<form name="auth">
<div class="Form-errorSummary">
<ul></ul>
</div>
<div >
<label for="mui-id-1">E-mail</label>
<input required="" name="email" value="" type="text" id="mui-id-1">
<hr><hr>
</div>
<div>
<label for="mui-id-2">Password</label>
<input name="password" required="" type="password" id="mui-id-2">
<hr><hr>
</div>
<div>
<input type="checkbox" name="remember">
<div>
<div>
</div>
<div>
<div>
<svg viewBox="0 0 24 24">
<path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path>
</svg>
<svg viewBox="0 0 24 24">
<path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z">
</path>
</svg>
</div>
<div>
</div>
<div>
</div>
</div>
<label for="mui-id-48">Remember me</label>
<div></div>
</div>
</div>
<div>
<button tabindex="0" type="submit">
<div>
<div>
<span>Sign In</span>
</div>
</div>
</button>
</div>
</form>
</div>
我尝试了其他方法,例如在findElement部分使用click函数,例如:
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(5) > button'
}).click();
但这是行不通的。使用以下几行在findElement上不使用sendKeys:
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(5) > button'
}).sendKeys(driver.Key.ENTER);
或者
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(5) > button'
}).sendKeys(driver.Key.RETURN);
当我在chrome实例中将表单置于相同状态时,可以使用以下代码轻松地在chrome dev工具中单击带有香草JS的按钮:
document.querySelector('#app > div > div > div > div > form > div:nth-child(5) > button').click()
但是当我尝试在测试脚本中使用executeScript时,它不起作用:
this.driver.executeScript("document.querySelector('#app > div > div > div > div > form > div:nth-child(5) > button').click()");
我仍然收到与上述相同的错误,我停留在登录页面上并且无法前进。
当找到某些元素和期望时,我可以通过添加睡眠功能来等待页面完全加载来使测试通过:
this.driver.sleep(250)
我弄乱了时间,似乎250ms是实现我的目的所需的最少时间,而又不会使测试时间太长。
这是在我的代码中实现时的外观:
var driver = require('selenium-webdriver'),
chai = require('chai'),
expect = chai.expect;
chai.use(require('chai-as-promised'));
describe('Webdriver - Admin Page Tests - ', function() {
beforeEach(function() {
this.timeout(10000);
this.driver = new driver.Builder().withCapabilities(driver.Capabilities.firefox()).build();
return this.driver.get('https://admin.example.us/en-US/sign-in');
});
afterEach(function() {
return this.driver.quit();
});
describe('Login verification -', function() {
it('filling in credentials and accessing the portal', function () {
this.driver.sleep(250);
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(2) > input'
}).sendKeys('[email protected]');
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(3) > input'
}).sendKeys('example');
this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(4) > input[type="checkbox"]'
}).click();
var formButton = this.driver.findElement({
css: '#app > div > div > div > div > form > div:nth-child(5) > button'
});
this.driver.actions()
.mouseMove(formButton)
.click()
.perform();
this.driver.sleep(250);
return expect(this.driver.getCurrentUrl()).to.eventually.equal('https://admin.example.us/en-US/dashboard');
});
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句