Selenium WebDriver:我想在字段中覆盖值,而不是使用Java使用sendKeys附加到它

Tru*_*lue 64 java sendkeys selenium-webdriver

在WebDriver中,如果我使用sendKeys,它会将我的字符串附加到字段中已存在的值.我无法通过使用clear()方法清除它,因为第二个我这样做,网页将抛出一个错误,说它必须介于10和100之间.所以我无法清除它或者之前会抛出错误我可以使用sendKeys输入新值,如果我sendKeys它只是将它附加到已存在的值.

WebDriver中有什么东西可以覆盖字段中的值吗?

Tim*_*nks 100

您也可以在发送密钥之前清除该字段.

element.clear()
element.sendKeys("Some text here")
Run Code Online (Sandbox Code Playgroud)

  • True_Blue在问题中提到他不能使用clear(),因为第二个他这样做,网页会抛出一个错误,说它必须在10到100之间. (7认同)
  • 如果此解决方案对某人不起作用的其他信息:确保`element.GetAttribute("value")`在调用`element.clear()`之前确实有一个值(等待此值为非空).使用ngModel指令测试AngularJS输入时有时会发生这种情况. (6认同)
  • 好决定.我将在这里保留我的答案,以防万一将来对某人有用,因为标题没有具体说明. (5认同)

Ser*_*rov 81

我想你可以尝试首先选择字段中的所有文本然后发送新序列:

from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
Run Code Online (Sandbox Code Playgroud)

  • 那么也许你会把它标记为已经解决了吗?:) (3认同)
  • @SergiiPozharov 有与此命令等效的 Python 吗?我使用了 `send_keys` 但收到错误 `AttributeError: type object 'Keys' has no attribute 'chord'` (3认同)
  • 是的,有效,我只需要导入Keys类.非常感谢. (2认同)
  • @BaoNgo 对于 Mac,您需要使用“Keys.COMMAND”而不是“Keys.CONTROL”。 (2认同)
  • 找到了。`element.send_keys(Keys.CONTROL, 'a')` (2认同)

小智 19

好的,这是几天前......在我目前的情况下,ZloiAdun的答案对我不起作用,但让我非常接近我的解决方案......

代替:

element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
Run Code Online (Sandbox Code Playgroud)

以下代码让我高兴:

element.sendKeys(Keys.HOME, Keys.chord(Keys.SHIFT, Keys.END), "55");
Run Code Online (Sandbox Code Playgroud)

所以我希望能帮到别人!


小智 7

这对我有用.

mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE);
Run Code Online (Sandbox Code Playgroud)

  • 这应该会更好,Ctrl+A 在西班牙语键盘/Windows 中可能不起作用。 (2认同)

Noa*_*man 6

如果它对任何人都有帮助,则ZloiAdun的答案的C#等效项是:

element.SendKeys(Keys.Control + "a");
element.SendKeys("55");
Run Code Online (Sandbox Code Playgroud)