0

因此,假设我有一个名为 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

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

4

2 回答 2

1

使用操作 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) }
于 2018-12-07T19:41:16.583 回答
0

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

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

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

于 2018-12-07T18:20:34.343 回答