“输入文本”和“按键”之间有什么区别?

时间:2019-10-07 08:19:21

标签: selenium robotframework

当我使用“输入文本”在文本框中输入文本时,有时会发生一些错误吗?
enter image description here

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

注意:XPATH是正确的。

硒文档:

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

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

3 个答案:

答案 0 :(得分:1)

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

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无法生成的元素生成事件。此类事件可能会在被测试页面上以特殊方式处理,因此,假设后者可以扩展测试范围(取决于这些事件是否在您的应用程序中以特殊方式处理过)。

答案 1 :(得分:0)

输入文字可在DOM上找到元素,并在按下键盘操作时发送文字

您将收到过时的元素异常,这意味着元素尚未准备就绪并在过时的情况下跳转,要解决该问题,您需要等到过时的解析解决之后才能执行诸如刷新之类的操作,并多次尝试

可以等待如下的JAVA代码:

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

OR

您还可以刷新页面,请尝试:

driver.navigate().refresh();

在引发Stale Reference异常的元素之前使用刷新

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

答案 2 :(得分:0)

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

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