因此,可以说我有一个名为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
为什么会这样?是因为先前的操作仍在操作队列中并且尚未清除吗?还是其他原因?如果有人可以提供帮助,我将不胜感激。
答案 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