用数字增加输入框上数字的稳定方式

  • 本文关键字:数字 方式 增加 c# selenium
  • 更新时间 :
  • 英文 :


具有类型号的输入框的Html如下

<input id="noofItems" type="number" max="99" min="1" class="form-control" data-bind="value: noofItems" />

在我的硒测试中,我有一个在输入框中输入数字的代码

[FindsBy(How = How.Id, Using = "noofItems"), CacheLookup]
private HtmlElement ItemsInput;
ItemsInput.WaitForVisible().SendKeys(Keys.Control + "a");
ItemsInput.WaitForVisible().SendKeys(Keys.Control + "x");
ItemsInput.WaitForVisible().SendKeys("2");
ItemsInput.WaitForVisible().SendKeys(Keys.Return); // need this to reload dom
ItemsInput.Click();

默认情况下,输入框的值为1,但当测试运行时,我想更改为2。但有时值会更改为12而不是2。

如何解决此问题?我在用彩色打印机。

WaitForVisible()方法的更多信息将有助于我们以更好的方式调试问题。然而,当您将SendKeys()调用到<input>标记时,理想情况下需要为ElementToBeClickable()引入WebDriverWait

同样,不使用Id,您可以使用以下定位器策略之一:

  • CssSelector:

    [FindsBy(How = How.CssSelector, Using = "input.form-control#noofItems"), CacheLookup]
    private HtmlElement ItemsInput;
    
  • XPath:

    [FindsBy(How = How.XPath, Using = "//input[@class='form-control and @id='noofItems'']"), CacheLookup]
    private HtmlElement ItemsInput;
    

最后,不使用Keys.Control + "a"Keys.Control + "x",您可以使用经过验证且稳健的Clear()方法,如下所示:

ItemsInput.WaitForVisible().Click(); //preferably wait for ElementToBeClickable()
ItemsInput.Clear();
ItemsInput.SendKeys("2");
ItemsInput.SendKeys(Keys.Return);

PS:元素在可点击后返回后,您可以同时调用Clear()SendKeys(),而无需任何其他等待程序。

如果字段为空,则返回默认值。你可以尝试在不删除的情况下更改它

ItemsInput.WaitForVisible().SendKeys(Keys.Control + "a");
ItemsInput.WaitForVisible().SendKeys("2");

作为解决方案,您还可以使用JavaScript设置value属性

driver.ExecuteScript("arguments[0].setAttribute('value', arguments[1]);", ItemsInput, 2);