“输入文本”和“按键”有啥区别?
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
关键字。此外,在某些情况下,您需要单击元素以使其可编辑。
【讨论】:
以上是关于“输入文本”和“按键”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章