Java:输入自动格式设置时,Selenium Webdriver无法发送sendKeys()

时间:2018-12-30 21:51:17

标签: java selenium webdriver sendkeys

我想用Selenium Webdriver填充网站上的输入字段。输入字段如下所示:

$product_obj = get_page_by_path( $slug, OBJECT, 'product' );

因此,我以前在填写输入字段时从未遇到问题。但这会自动格式化输入,因此,如果您输入24424,它会自动使其中的24.424变成

如果我现在使用Webdriver输入值,则可以输入它(例如4200),并且输入字段使它变成4.200。但是当我提交属于输入字段的表单时,它将值更改为0。 疯狂的事情是,如果我输入的值小于1000,并且输入字段不需要格式化,那么我可以提交正确的数字。有人知道为什么吗?

我已经尝试过的方法:

  • 睡觉
  • 使用sendKeys进行较慢的输入(因此只有1个字符,然后等待300毫秒)

但是两者都没有帮助。这是我的代码-

<input type="text" pattern="[0-9,.]*" class="checkThousandSeparator hideNumberSpin" name="metal" tabindex="1" id="metal" value="0" onblur="updateVariables();" onkeyup="checkRessourceByType('metal'); updateVariables();" onkeypress="return submitOnEnter(event);">

没有错误或任何东西

编辑:我忘了说:如果我使用Selenium Webdriver输入值,表单只会提交正确的值。如果我输入 手动设置值,即使该值> 1000,表单也始终会提交正确的值。
Edit2解决方案:好的。不需要使用sendKeys()-Method,而是需要通过JavaScriptExecuter设置值。

//doesn't work, form will submit a "0"
int met = 4200;
driver.findElement(By.id("metal")).sendKeys(Integer.toString(met));

//works, form submits the right value
int met = 200;
driver.findElement(By.id("metal")).sendKeys(Integer.toString(met));

3 个答案:

答案 0 :(得分:0)

您可以使用硒删除pattern属性和class属性。然后,您可以尝试输入所需的值。

尝试一下

答案 1 :(得分:0)

您描述的行为对我来说似乎是个错误。假设您手动键入时没有发生这种情况,则可能是由于Selenium很快“按下”了按键造成的。

每次按键后稍等片刻可能会有所帮助:

String[] digits = "200".split("");
for (String digit : digits) {
    inputElement.sendKeys(digit);
    Thread.sleep(250);
}

在不知道这些处理程序的实现的情况下,不可能缩小原因。

答案 2 :(得分:0)

您可以尝试一下,

df['Protection'] = np.where((df['Email']=='trump@gmail.net'),'off','on')

还有这个

int met = 4200;
driver.findElement(By.id("metal")).sendKeys("" + met);

String met = "4200";
driver.findElement(By.id("metal")).sendKeys(String.valueOf(met));

,并且还使用driver.findElement(By.id("metal")).sendKeys(Keys.NUMPAD4, Keys.NUMPAD2, Keys.NUMPAD0, Keys.NUMPAD0);

JavaScript

尝试一下。