当我使用“输入文本”在文本框中输入文本时,有时会发生一些错误吗?
enter image description here
但是,我只是将“输入文本”更改为“按键”,它将正常工作。
注意:XPATH是正确的。
硒文档:
输入文本->在定位器标识的文本字段中输入给定文本。
按动键->模拟用户按动元素或活动浏览器上的键。
答案 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
关键字。另外,在某些情况下,您需要单击该元素以使其可编辑。