python selenium:在单击click()命令后不等待页面加载
有人知道如何等待页面加载吗?我尝试了在网上找到的所有可能的变体,但根本无法正常工作。
触发click()命令后,我需要等待,Web服务器上存在一些内部脚本,这些脚本会愚弄检查,例如(我排除了导入所需模块并使用标准命名约定的代码):
WebDriverWait(browser, 10).until(lambda d: d.find_element_by_id(the_id))
要么
browser.implicitly_wait(10)
要么
elem2=wait.until(EC.presence_of_element_located((By.ID,the_id)))
上述所有检查均无效,从某种意义上来说,即使页面仍在加载中,它们也会返回True。这会导致我正在阅读的文本不完整,因为click()命令后页面未完全加载。似乎在python中,命令
clickAndWait
不可用(但同样,由于其他测试也失败了,它可能无法解决问题)。理想情况下,将有一条命令等待直到整个网页加载完毕(无论页面的特定元素如何)。
我设法通过在循环中手动插入time.sleep(5)来解决了这个问题,但这不是很理想,因为这可能会减慢整个过程。如果可能,最好只等待严格要求的时间。
谢谢
回答:
从根本上讲,如果页面是由JavaScript生成的,则无法得知页面何时“完成”加载。
然而。我通常尝试检索页面元素,捕获异常并继续尝试直到达到超时。我可能还会检查该元素是否可见,而不仅仅是存在。
必须有一些DOM元素,其可见性可用于测试页面“完成”加载。我的测试用例中通常有一个wait_for_element_visibility
和wait_for_element_presence
函数。
def wait_for_visibility(self, selector, timeout_seconds=10): retries = timeout_seconds
while retries:
try:
element = self.get_via_css(selector)
if element.is_displayed():
return element
except (exceptions.NoSuchElementException,
exceptions.StaleElementReferenceException):
if retries <= 0:
raise
else:
pass
retries = retries - 1
time.sleep(pause_interval)
raise exceptions.ElementNotVisibleException(
"Element %s not visible despite waiting for %s seconds" % (
selector, timeout_seconds)
)
get_via_css
是我自己的功能之一,但我希望它很清楚自己在做什么。
以上是 python selenium:在单击click()命令后不等待页面加载 的全部内容, 来源链接: utcz.com/qa/428884.html