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) }
所以假设我有一个名为 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) }