【问题标题】:How to clear the default value entered in calendar box and send a new date of birth如何清除日历框中输入的默认值并发送新的出生日期
【发布时间】:2024-01-18 17:48:01
【问题描述】:

我想在日历框中发送密钥,但该框中有默认值

我尝试在 sendKeys 之前清除它,但它不起作用

我的代码:

Actions actions = new Actions(driver);
                            actions.moveToElement(driver.findElement(By.xpath("//*[@id='dateOfBirth']")));
                            actions.click();
                            actions. clear();
                            Thread.sleep(3000);     
                            actions.sendKeys("07-12-2018");
                            actions.sendKeys(Keys.TAB);
                        actions.build().perform();

请帮我清除盒子

HTML 代码:

<input type="text" value="07-14-1993" id="dateOfBirth" class="react-datepicker-ignore-onclickoutside">

【问题讨论】:

  • 请向我们展示此框、网络链接或 HTML 代码
  • @AndreiSuvorkov 请查看更新问题中的 html 代码,其中包含我要清除的默认值
  • 当用户想要手动更改日期时需要做什么?
  • 他必须选择日期,如选择年份,然后日期更改日期@AndreiSuvorkov
  • 我明白他必须选择。究竟是什么意思选择?单击然后在输入字段中输入,或者单击会打开一些东西?

标签: java selenium automation cucumber bdd


【解决方案1】:

你可以试试Actions,而不是:

WebElement input = driver.findElement(By.xpath("//*[@id='dateOfBirth']"));
input.click();
input.clear();
input.sendKeys("07-12-2018");
input.sendKeys(Keys.TAB); // I don't know why you need TAB, but since you have it in your code

Actions actions = new Actions(driver);
actions.moveToElement(driver.findElement(By.xpath("//*[@id='dateOfBirth']")));
actions.click();
actions.build().perform();
WebElement input = driver.findElement(By.xpath("//*[@id='dateOfBirth']"));
input.clear();
input.sendKeys("07-12-2018");
input.sendKeys(Keys.TAB);

Actions actions = new Actions(driver);                        
actions.moveToElement(driver.findElement(By.xpath("//*[@id='dateOfBirth']")));
actions.click();
actions.sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE);
Thread.sleep(3000);     
actions.sendKeys("07-12-2018");
actions.sendKeys(Keys.TAB);
actions.build().perform();

或使用 JavaScript:

WebElement input = driver.findElement(By.xpath("//*[@id='dateOfBirth']"));
JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute(value, '07-12-2018')", input);

【讨论】:

  • 我首先尝试了这个,但它给了我一个无法关注元素的错误,这就是我使用动作类的原因
  • ok,你可以使用 Actions 来 moveToelement 并点击它,然后分别清除和发送键。我已经编辑了我的答案,请看一下
  • 试过了,但它再次使用默认值附加了 sendkeys 值
  • 在回答中再尝试一项建议。顺便说一句,你为什么使用 TAB?可能是 TAB 导致了这个问题?
  • 我尝试了所有解决方案,它正在清除默认值,然后输入默认值,然后我的 sendkeys 值被附加到它
最近更新 更多