Java 元素的sendKeys函数应该使用哪种类型的等待?蟒蛇硒
如果我必须使用sendKeys为可能加载缓慢或被动画阻碍的元素属性设置值,我应该使用哪种类型的wait for elemnt 目前,我使用selenium的预期条件库中的元素的可见性,但由于某些原因,有时键入未完成,光标在元素上闪烁,就好像找到了元素,但没有插入值一样 我不确定元素的可见性是否是正确的用例,你们有什么建议吗 编辑:这是一个更“挑选你的大脑”类型的问题,而我希望了解更好的用例,如果有任何适用于我上面描述的。如果需要任何其他信息,我很乐意在这里补充 我使用xpath和值调用的方法,作为强制输入:Java 元素的sendKeys函数应该使用哪种类型的等待?蟒蛇硒,java,python,selenium,selenium-webdriver,Java,Python,Selenium,Selenium Webdriver,如果我必须使用sendKeys为可能加载缓慢或被动画阻碍的元素属性设置值,我应该使用哪种类型的wait for elemnt 目前,我使用selenium的预期条件库中的元素的可见性,但由于某些原因,有时键入未完成,光标在元素上闪烁,就好像找到了元素,但没有插入值一样 我不确定元素的可见性是否是正确的用例,你们有什么建议吗 编辑:这是一个更“挑选你的大脑”类型的问题,而我希望了解更好的用例,如果有任何适用于我上面描述的。如果需要任何其他信息,我很乐意在这里补充 我使用xpath和值调用的方法,作
def type_js(self, xpath, value, enter=None, priority=None, enable_Logging=True, js=None, classValue=None, forLoopPause=0.1, type_Token=False):
if isinstance(value, int) == True:
value = str(value)
if enable_Logging == True:
try:
WebDriverWait(self.browser, 10).until(ec.visibility_of_element_located((By.XPATH, xpath)))
elemnt = self.browser.find_element_by_xpath(xpath)
elemnt.clear()
if type_Token == True:
elemnt.click()
from pynput.keyboard import Key, Controller
for i in list(value):
# elemnt.send_keys(i)
keyboard = Controller()
keyboard.press(str(i))
keyboard.release(str(i))
time.sleep(1)
else:
if js == True:
self.browser.execute_script(
"arguments[0].setAttribute('value', '{}');".format(value.replace('\n', '')),
self.browser.find_element_by_xpath("{}".format(xpath)))
else:
for i in list('{}'.format(value)):
elemnt.send_keys(i)
time.sleep(forLoopPause)
if enter != None:
elemnt.send_keys(Keys.ENTER)
utilities.loggingObj.priority_handler(xpath=xpath, priority=priority, action_type='Type',
isException=False, browser=self.browser)
except(NoSuchElementException, StaleElementReferenceException) as e:
print(
'exceptie {} pentru xPath : {}\nException Stack Trace : {}'.format(str(e), xpath,
e))
utilities.loggingObj.priority_handler(xpath=xpath, priority=priority, action_type='Type',
isException=True,
exeption='exceptie {} pentru xPath : {}\nException Stack Trace : {}'.format(
str(e), xpath,
e), browser=self.browser)
return False
except(TimeoutException) as e_timeout:
print(
'exceptie {} pentru xPath : {}\nException Stack Trace : Elementul nu a fost vizibil pe pagina in 3 sec de wait (TimeoutException)'.format(
str(e_timeout), xpath))
utilities.loggingObj.priority_handler(xpath=xpath, priority=priority, action_type='Type',
isException=True, exeption=
'exceptie {} pentru xPath : {}\nException Stack Trace : Elementul nu a fost vizibil pe pagina in 3 sec de wait (TimeoutException)'.format(
str(e_timeout), xpath), browser=self.browser)
看一下等待时间,它可能会对你有所帮助 SeleniumWebDriver提供两种类型的等待—隐式和显式。 显式等待使WebDriver等待特定条件发生 在继续执行之前。含蓄的等待会使人失望 WebDriver在尝试访问时轮询DOM一段时间 定位一个元素
您可以使用元素进行单击。如果没有任何效果,请尝试java脚本执行器。使用与代码、日志和屏幕图像相关的更多信息更新问题。该问题每运行50次测试就会出现一次或两次,将使用我用于尽快键入的方法进行更新。虽然这不是帖子的目标,但我认为你必须在
WebDriverWait(self.browser,10)中使用“clickable”。直到(ec.visibility\u of_element\u located((By.XPATH,XPATH))
而不是检查元素的可见性。是的,这是我以前使用的,但我认为还有一些我没有读过的功能,或者一些更聪明的方法来实现这一点。虽然我认为在这种情况下“点击”会更好,但是,感谢这些伙伴,我想知道我的用例是否不是最佳的。谢谢你!