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

时间:2019-11-13 08:38:21

标签: c# selenium

类型为数字的输入框的HTML如下

break

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

case R.id.location:
    getSupportFragmentManager().beginTransaction().replace(R.id.frag_cont, new currentlocation()).commit();
    break;

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

该如何解决?我正在使用chromedriver。

2 个答案:

答案 0 :(得分:1)

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

同样,您可以使用以下Locator Strategies之一来代替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(),而无需任何其他服务员。

答案 1 :(得分:0)

如果该字段为空,则似乎返回默认值。您可以尝试更改它而不删除它

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

要解决此问题,您还可以将value属性设置为JavaScript

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