基本上它们几乎相同。 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 无法生成的元素生成事件。此类事件可能会在您的测试页面上以某种特殊方式处理,因此后一种方法假设可以扩展您的测试覆盖范围(取决于这些事件是否真的在您的应用程序中以任何特殊方式处理)。