使用 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 的机器人框架,按键无需选择页面中的任何按钮或元素的主要内容,如果未能解决你的问题,请参考以下文章

无需深度学习框架,如何从零开始用Python构建神经网络

为啥要选择Python语言实现机器学习算法

图灵社区 阅读 为啥要选择Python语言实现机器学习算法

Python机器学习框架介绍

如何使用机器人框架硒打开新窗口?

按键精灵和Python哪个强大,学哪个用处大