我的问题:我有一个填充字段的方法,但问题是 selenium 没有将完整的字符串发送到该字段,所以我的断言在验证时失败。
My code:
var webdriver = require('selenium-webdriver');
var casual = require('casual');
var expect = require('chai').expect;
var By = webdriver.By;
exports.addPropuesta = function (driver) {
var first_name = casual.first_name;
driver.findElement(By.xpath("//a[contains(text(),'Añadir Propuesta Test')]")).click();
name_field = driver.findElement(By.name('nombre'));
name_field.sendKeys(first_name);
driver.findElement(By.css("Input[type='submit']")).click();
driver.findElement(By.css('.table')).getText().then(function(table_content){
expect(table_content).to.include(first_name);
});
};
看起来像this是一个常见问题。
在尝试解决方法之前,作为健全性检查,请确保在发送密钥时输入字段已准备好接收输入。您也可以尝试在调用 SendKeys 之前清除该字段。我假设您看到字符串被截断,而不是字符丢失或带有某些工件的前缀(例如占位符文本或先前测试的剩余输入)。
如果这不起作用,一些解决方法:
-
使用 JavaScript 设置输入字段的值,而不是调用 SetKeys。在我执行此操作的某些网站上,除非我还触发输入更改事件,否则输入值实际上不会被识别。
C# 中的示例。希望您唯一需要的更改是将 ExecuteScript 改为executeScript。
driver.ExecuteScript("var exampleInput = document.getElementById('exampleInput'); exampleInput.value = '" + testInputValue + "'; exampleInput.dispatchEvent(new Event('change'));");
当然,您可以将其分成两行,第一行用于设置值,第二行用于分派事件。
-
单独发送每个密钥。这是我在有关此问题的线程中多次看到的解决方法。
for (var i = 0; i < first_name.length; i++) {
name_field.sendKeys(first_name.charAt(i));
}
https://github.com/angular/protractor/issues/3196
https://github.com/angular/protractor/issues/2019
如果您想寻找其他可能的问题解决方案,可以通过简单搜索“webdriver sendkeys does not wait for all the key”找到更多线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)