“输入文本”和“按键”有啥区别?

Posted

技术标签:

【中文标题】“输入文本”和“按键”有啥区别?【英文标题】:What is difference between "Input Text" and "Press keys"?“输入文本”和“按键”有什么区别? 【发布时间】:2020-02-04 12:37:40 【问题描述】:

当我使用“输入文本”在文本框中输入文本时,有时会出现一些错误?

但是,我只是将“输入文本”更改为“按键”就可以正常工作了。

注意:XPATH 是正确的。

硒文档:

输入文本-> 将给定的文本输入到由定位器标识的文本字段中。

Press keys-> 模拟用户对元素或活动浏览器的按键。

【问题讨论】:

添加代码/错误的图像/屏幕截图不是好的做法。请以文本/代码的形式将其添加为问题的一部分,也请阅读minimal reproducible example 并遵循相同的做法以获得问题的良好答案 【参考方案1】:

基本上它们几乎相同。 Robot Framework 使用SeleniumLibrary,它使用关键字“shell”来包装 Web 驱动程序。您可以在下面找到一些从那里发现相关代码的 sn-p:

def _input_text_into_text_field(self, locator, text, clear):
    element = self.find_element(locator)
    if is_truthy(clear):
        element.clear()
    element.send_keys(text)

def _press_keys(self, locator, parsed_keys):
    if is_truthy(locator):
        element = self.find_element(locator)
    else:
        element = None
    for parsed_key in parsed_keys:
        actions = ActionChains(self.driver)
        special_keys = []
        for key in parsed_key:
            if self._selenium_keys_has_attr(key.original):
                special_keys = self._press_keys_special_keys(actions, element, parsed_key,
                                                             key, special_keys)
            else:
                self._press_keys_normal_keys(actions, element, key)
        for special_key in special_keys:
            self.info('Releasing special key %s.' % special_key.original)
            actions.key_up(special_key.converted)
        actions.perform()

def _press_keys_normal_keys(self, actions, element, key):
    self.info('Sending key%s %s' % (plural_or_not(key.converted), key.converted))
    if element:
        actions.send_keys_to_element(element, key.converted)
    else:
        actions.send_keys(key.converted)

def _press_keys_special_keys(self, actions, element, parsed_key, key, special_keys):
    if len(parsed_key) == 1 and element:
        self.info('Pressing special key %s to element.' % key.original)
        actions.send_keys_to_element(element, key.converted)
    elif len(parsed_key) == 1 and not element:
        self.info('Pressing special key %s to browser.' % key.original)
        actions.send_keys(key.converted)
    else:
        self.info('Pressing special key %s down.' % key.original)
        actions.key_down(key.converted)
        special_keys.append(key)
    return special_keys

换句话说,当您调用Input Text 时,它首先会尝试清除该字段(与您调用Press Keys 时不同)。但是使用Input Text,您将无法生成一些按键,例如“向上、向下”等。

按键,能够发送一些“特殊”键可以针对Input Text 无法生成的元素生成事件。此类事件可能会在您的测试页面上以某种特殊方式处理,因此后一种方法假设可以扩展您的测试覆盖范围(取决于这些事件是否真的在您的应用程序中以任何特殊方式处理)。

【讨论】:

谢谢!我会试试的。【参考方案2】:

输入文本在 DOM 上查找元素并在按键进行键盘操作时发送您的文本

您遇到过时元素异常,这意味着元素尚未准备好并在过时情况下跳转,要解决它,您需要等到过时解决才能执行刷新等操作,多次尝试循环

可以等待的JAVA代码如下:

 WebDriverWait wait = new WebDriverWait(driver, 60);
 wait.until(ExpectedConditions.stalenessOf(element)

你也可以刷新页面,试试:

driver.navigate().refresh();

在元素抛出 Stale Reference 异常之前使用刷新

根据您的要求更改代码语法

【讨论】:

答案不能证明问题的意图并且完全不相关,问题与 java 绑定无关,但建议的答案在 java 中 答案是相关的,因为他正在获取陈旧的元素执行,检查他的错误图像,是的,正如我在答案中所述,代码在 java 中,最好提供正确的解决方案或参考,并且 OP 可以做了简单的改变 请再读一遍它的InvalidElementStateException 而不是StaleElementReferenceException 两者都有很大的不同,所以ans与它无关,这个问题已经被OP解决了,现在OP问有什么区别一种工作方式而不是另一种工作方式【参考方案3】:

脚本失败时元素处于什么状态?

你可以试试Wait Until Element Is Enabled关键字。此外,在某些情况下,您需要单击元素以使其可编辑。

【讨论】:

以上是关于“输入文本”和“按键”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的getch与getchar 有啥区别?

RK3288里面说的普通按键和AD按键是啥,有啥区别?

html文本输入onchange事件

你好!我想请问在按键精灵里关于网页输入文本的方法,SayString "你好" 这个命令不行,怎么回事

如何onkeypress事件中得到一个输入文本框的文本

选择选项数量导致 iPad 上的文本输入响应缓慢