使用 Python 的机器人框架,按键无需选择页面中的任何按钮或元素
Posted
技术标签:
【中文标题】使用 Python 的机器人框架,按键无需选择页面中的任何按钮或元素【英文标题】:Robot Framework using Python, key press without selecting any button or element in the page 【发布时间】:2015-04-25 15:01:15 【问题描述】:我正在使用 Python 使用 Robot Framework 自动化一个应用程序。在某些情况下,我需要在页面加载后按 Enter 而不选择页面的任何按钮或元素。
我已尝试使用以下示例(使用 Press Key
),但它不起作用,因为我不想在按 Enter 之前选择页面的任何特定按钮或元素页面。
例子:
Press Key text_field q
Press Key login_button \\\13 # ASCII code for the Enter key
IDE 无法识别以下关键字,很可能是因为版本:
Press Key Native
有没有办法解决这个问题?
【问题讨论】:
您是否尝试过使用文档根目录作为“Press Key”的目标? 【参考方案1】:Linux 替代品可以是PyAutoGUI
虽然它也适用于 Windows 和 MacOS(跨平台),如文档中所述
PyAutoGUI 适用于 Python 2 和 3。从 PyPI 安装
pip install pyautogui
例子:
import pyautogui
def send_keys():
"""
Works on Windows/Mac/Linux
"""
pyautogui.press('enter') #Presses enter
pyautogui.hotkey('ctrl', 'shift', 'esc') #Performs ctrl+shift+esc
pyautogui.typewrite('Hello world!\n', interval=secs_between_keys) #Useful for entering text, newline is Enter
pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=.4) #A list of key names can be passed too
【讨论】:
很好的参考。谢谢! :)【参考方案2】:如果您想向页面发送按键事件,但不是在特定元素处 - 使用 Press Key
关键字定位页面中的 <body>
元素:
Press Key xpath=//body \ue00f # this is the Page Down key
Press Key css=body \ue00e # and this - Page Up
可以在 selenium 的源代码中找到最新的关键代码列表,webdriver.common.Keys module 包含它们的定义。
恕我直言,在操作系统中执行击键的库(如 AutoIt 或 Java 机器人)应尽可能避免 - 它们使您的自动化脚本依赖于执行机器(和操作系统),并且仅限于本地 - 您无法运行浏览器针对 Selenium Hub 进行测试(Sauce labs、Browsertstack 等)。
【讨论】:
【参考方案3】:Robot Framework Selenium 库只能向元素发送按键。如果要发送实际的按键,则需要编写自己的库来执行此操作。在 Windows 中,这可以使用 SendKeys 模块完成。
这是一个为 Robot Framework 定义“Send Enter Key”关键字的库。我在 Chrome 上快速测试了一下,PhantomJS 可能有问题。
import SendKeys
def send_enter_key():
"""
Sends ENTER key to application
Works only in Windows
"""
SendKeys.SendKeys("ENTER")
【讨论】:
有linux替代品吗?【参考方案4】:试试用两个斜线,而不是三个:
Press Key text_field q
Press Key login_button \\13 # ASCII code for the Enter key
【讨论】:
如果将其作为变量注入,则为一个斜线。直接用的话就是两个。【参考方案5】:您可以使用 Press Keys 关键字来做到这一点:
按键\ENTER 按键\示例写字 按键\TAB等等...我有 Robot Framework 3.1.1(win32 上的 Python 2.7.9)和SeleniumLibrary。
【讨论】:
不确定这里的反斜杠是什么意思,但我可以使用xpath=//body
,就像在 Todor 的回答中一样。以上是关于使用 Python 的机器人框架,按键无需选择页面中的任何按钮或元素的主要内容,如果未能解决你的问题,请参考以下文章