Selenium-send_keys()发送不完整的字符串

Raf*_* C. 4 javascript selenium node.js selenium-webdriver

我的问题:我有一种填充字段的方法,但是问题是硒没有将完整的字符串发送到该字段,因此我的断言在验证时失败。

我的代码:

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);

    });
};
Run Code Online (Sandbox Code Playgroud)

Kev*_*bbs 5

看来是一个常见问题。

在尝试变通办法之前,要进行健全性检查,请确保在发送键之前输入字段已准备好接收输入。您也可以尝试在调用SendKeys之前清除该字段。我假设您看到的字符串被截断了,而字符没有丢失或带有某些伪像(例如占位符文本或先前测试的剩余输入)。

如果不起作用,请采取以下解决方法:

  1. 使用JavaScript而不是调用SetKeys来设置输入字段的值。在执行此操作的某些网站上,除非我也触发输入更改事件,否则实际上不会识别输入值。

    C#中的示例。希望您唯一需要做的更改是使ExecuteScript改为executeScript。

    driver.ExecuteScript("var exampleInput = document.getElementById('exampleInput'); exampleInput.value = '" + testInputValue + "'; exampleInput.dispatchEvent(new Event('change'));");
    
    Run Code Online (Sandbox Code Playgroud)

    当然,您可以将其分为两行,一行设置值,第二行发送事件。

  2. 分别发送每个密钥。这是一个变通办法,我已经从线程中多次看到有关此问题的信息。

    for (var i = 0; i < first_name.length; i++) {
        name_field.sendKeys(first_name.charAt(i));
    }
    
    Run Code Online (Sandbox Code Playgroud)

https://github.com/angular/protractor/issues/3196
https://github.com/angular/protractor/issues/2019
等。等等。通过简单搜索“ webdriver sendkeys not wait,可以找到更多线程”对于所有键”,如果您想寻找解决问题的其他方法。