故事:
在StackOverflow上,我看到用户报告他们无法通过selenium WebDriver"click"命令单击一个元素,并且可以通过执行脚本单击JavaScript来解决它.
Python中的示例:
element = driver.find_element_by_id("myid")
driver.execute_script("arguments[0].click();", element)
Run Code Online (Sandbox Code Playgroud)
WebDriverJS/Protractor中的示例:
var elm = $("#myid");
browser.executeScript("arguments[0].click();", elm.getWebElement());
Run Code Online (Sandbox Code Playgroud)
问题:
为什么在常规WebDriver点击时没有点击"通过JavaScript"?究竟是什么时候发生这种变通方法的缺点(如果有的话)?
我个人使用这种解决方法而没有完全理解为什么我必须这样做以及它可能导致什么问题.
有没有办法慢慢使用量角器编写Angular E2E测试,以便我可以观察到发生了什么?
任何人都可以建议我如何在执行量角器测试时禁用角度js应用程序中的动画.我在我的量角器配置文件中添加了以下代码,但这对我没有帮助:
var disableNgAnimate = function() {
angular.module('disableNgAnimate', []).run(function($animate) {
$animate.enabled(false);
});
};
browser.addMockModule('disableNgAnimate', disableNgAnimate);
Run Code Online (Sandbox Code Playgroud) 我的量角器conf.js,onPrepare函数需要发出一个貌似的http请求,
onPrepare: function(done) {
request.get('http://pepper/sysid')
.end(function(err, resp){
if(err || !resp.ok){
log("there is an error " + err.message)
done()
}else{
global.sysid = resp.sysid
done()
}
})
Run Code Online (Sandbox Code Playgroud)
它会抛出错误,done is not a function
有没有其他方法,我可以强制回调内部onPrepare在我的测试开始执行之前被调用?
sendKeys()方法会立即发送所有密钥(实际上,一次一个但很快):
var elm = element(by.id("myinput"));
elm.sendKeys("test");
Run Code Online (Sandbox Code Playgroud)
有没有办法减慢打字速度,以便量角器一次发送一个字符,每个字符之间有一个小延迟?
我们可以完全放慢Protractor的速度,但这不会改变sendKeys()工作方式,它也会减慢一切,而我们只需要"发送键"部分,并且仅在特定情况下.
protractor ×5
angularjs ×4
javascript ×3
selenium ×2
testing ×2
asynchronous ×1
e2e-testing ×1
node.js ×1
python ×1