java - Java:输入自动格式时,Selenium Webdriver 无法 sendKeys()
问题描述
我想用 selenium webdriver 填写网站上的输入字段。输入字段如下所示:
<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);">
所以我以前在填写输入字段时从来没有遇到过问题。但是这个会自动格式化输入,所以如果你输入 24424 它会自动生成 24.424 。
如果我现在使用 Webdriver 输入一个值,我可以输入它(例如 4200),然后输入字段会产生 4.200。但是当我提交属于输入字段的表单时,它会将值更改为0。疯狂的是,如果我输入一个低于1000的值并且输入字段不需要格式化,我可以提交正确的数字。有谁知道为什么?
我已经尝试过的:
- 睡觉
- 使用 sendKeys 进行较慢的输入(因此只有 1 个字符,然后等待 300 毫秒)
但两者都没有帮助。这是我的代码 -
//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));
没有错误或任何东西
编辑:我忘了说:如果我使用 selenium Webdriver 输入值,表单只会无法提交正确的值。如果我手动输入值,表单总是提交正确的值,即使它 > 1000。
Edit2 解决方案:好的。需要通过 JavaScriptExecuter 设置值,而不是使用 sendKeys()-Method。
//This works:
int met = 550000;
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('metal').setAttribute('value', '"+met+"')");
解决方案
你可以试试这个
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
,
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('metal').value='4200';");
试试看。
推荐阅读
- python - Pip 不会在 Windows 10 上安装 Twisted
- react-native - 如何在不部署到商店的情况下展示 React Native Expo 前端项目
- python - 使用重要性采样公式进行积分
- git - 更改 Git 子模块的“逻辑名称”
- reactjs - 这两种排序方法有什么区别?
- python - 为什么我不能绘制这个?(Python-足球领域)
- java - Gradle 无法使用 JavaFX 插件从 src/test 访问模块 src/main 中定义的类
- c++ - 使用 boost::geometry 将纬度和经度转换为 UTM
- ios - Swift:如何以编程方式使用 UIViews 从 Interface Builder 填充 ScrollView
- progressive-web-apps - Lighthouse PWA 审核返回“start_url 离线时不响应 200”错误