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

时间:2018-12-07 17:58:40

标签: ruby selenium selenium-webdriver capybara selenium-ruby

因此,可以说我有一个名为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

为什么会这样?是因为先前的操作仍在操作队列中并且尚未清除吗?还是其他原因?如果有人可以提供帮助,我将不胜感激。

2 个答案:

答案 0 :(得分: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) }

答案 1 :(得分:0)

硒sendkeys的工作方式是,sendkeys命令将字符串值发送到text元素,它将不检查其中是否存在任何文本。 如果您希望每次都重新设置键, 请在循环中的version: '3' services: users-database: build: ./usersDatabase volumes: - ~/dbs/usersDatabase:/data/db ports: - 27017:3006 networks: - usersdb polls-database: build: ./pollsDatabase volumes: - ~/dbs/pollsDatabase:/data/db ports: - 27017:3007 networks: - pollsdb users-service: build: ./usersService ports: - 3004:3004 networks: - users - usersdb depends_on: - users-database poll-service: build: ./pollService ports: - 3003:3003 depends_on: - polls-database networks: - pollsdb - api main-service: build: ./mainService ports: - 3002:3002 networks: - pollsdb - users - api depends_on: - users-database - users-service - polls-database networks: users: driver: overlay internal: true usersdb: driver: overlay internal: true pollsdb: driver: overlay internal: true api: 之前使用命令chain.clear()。 这样可以确保每次在send_keys之前清除元素中的文本。

让我知道这是否对您没有帮助。

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