sendKeys()不适用于我的输入文件之一

时间:2015-06-11 16:03:32

标签: java selenium-webdriver testng

我在表单中有两个输入字段,其来源如下所述

<input class="col8 last right i-f ssn" data-val="true" data-val-regex="Please enter valid SSN number" data-val-regex-pattern="^((\d{3}-\d{2}-\d{4}|X{3}-X{2}-X{4}))$" id="SSN" name="SSN" type="text" value="" />

<input class="col8 last right i-f" id="MiddleName" maxlength="15" name="MiddleName" onkeypress="return isAlphabetKey(event)" type="text" value="" />

我正在尝试使用selenium web driver(Firefox)中的以下命令发送输入

driver.findElement(By.cssSelector("input[id='SSN']")).sendKeys("55555");
driver.findElement(By.cssSelector("input[id='MiddleName']")).sendKeys("xyz");

对于第一个字段,当我在TestNG下运行时没有出现错误但是第二个字段工作正常我已经包含了两个输入字段的页面源以方便。

3 个答案:

答案 0 :(得分:6)

可能的解决方案1:执行对sendKeys()的javascript调用 正如您所说,文本框的格式很可能不允许您将keyKeys()发送到输入框。原因可能是WebDriver处理将输入放入框中的方式。我建议尝试使用javascript来执行不同类型的输入填充方法。

WebDriver driver = new FirefoxDriver();

JavascriptExecutor executor = (JavascriptExecutor)driver;

executor.executeScript("document.getElementById("SSN").value='55555';);

可能的解决方案2:https://github.com/dsheiko/autofill

我没有一个好的代码片段,我可以告诉你使用自动填充,但github本身有很好的例子。

可能的解决方案3:删除输入标签的格式化属性,然后使用sendKeys()

((JavascriptExecutor) driver).executeScript("document.getElementsByID('SSN'[0].removeAttribute('data-val-regex-pattern');");
    WebElement input= driver.findElement(By.id("SSN"));
    input.clear();
    input.sendKeys("55555");

答案 1 :(得分:2)

如果在文本字段上有任何JQuery实现,selenium的sendKey()将不起作用,您必须使用以下代码片段

JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript("document.getElementById('field_id').value = 'field_val';");

答案 2 :(得分:1)

只需删除格式化输入标记的属性即可。然后你可以使用SendKeys()。