Ruby Selenium ActionBuilder send_keys 方法复制我发送的字符串

Ruby Selenium ActionBuilder send_keys method duplicating the strings I send

所以假设我有一个名为 list 的数组,其中包含以下字符串,当我遍历数组以 send_keys 将数组中的每个项目放到已经具有焦点的在线文本编辑器元素上时:

list = ["First", "Second", "Third"]

for index in 0 ... list.size
      line = list[index]
      chain.send_keys(line).perform
      if index < list.size 
        page.driver.browser.action.send_keys(:return).perform
      end
end

我面临的问题是输出看起来像这样:

First

Second

Third

它看起来像这样:

First

First Second

First Second Third

为什么会这样?是不是之前的action还在action queue中没有清理?还是其他原因?如果有人可以提供帮助,我将不胜感激。

selenium sendkeys 的工作方式是,sendkeys 命令将字符串值发送到文本元素,它不会检查其中是否存在任何文本。 如果你想每次都重新设置密钥, 请在循环中的 chain.send_keys(line).perform 之前使用命令 chain.clear()。 这将确保每次在 send_keys.

之前清除元素中的文本

如果这对您没有帮助,请告诉我。

https://selenium-python.readthedocs.io/navigating.html#interacting-with-the-page

当使用操作 api 时,它会建立一个操作列表,然后通过调用 perform 来执行这些操作。但是调用 perform 不会重置该列表,因此如果您再次调用 perform 它会重复相同的操作。用你的方式称呼它

chain.send_keys(line).perform

send_keys 操作添加到链中 - 然后执行它。下次它将另一个 send_keys 操作添加到链中,然后执行这两个操作。解决方案是每次都创建一个新的动作链,而不是每次通过循环重复使用 chain 或调用 chain.clear_actions 来清除动作链。

但不清楚的是为什么您要使用操作 API 而不是仅在要发送密钥的元素上调用 send_keys

el = find(...)  # find the element on the page you want to send the keys to
list.each do { |str| el.send_keys(str, :return) }