有人知道如何等到页面加载?我尝试了我在网上找到的所有可能的变种但是根本不起作用.
我需要在触发click()命令后等待,在Web服务器上有一些内部脚本,这些脚本会欺骗检查(例如,我排除导入所需模块的代码并使用标准命名约定):
WebDriverWait(browser, 10).until(lambda d: d.find_element_by_id(the_id))
Run Code Online (Sandbox Code Playgroud)
要么
browser.implicitly_wait(10)
Run Code Online (Sandbox Code Playgroud)
要么
elem2=wait.until(EC.presence_of_element_located((By.ID,the_id)))
Run Code Online (Sandbox Code Playgroud)
所有上述检查都不起作用,即使页面仍在加载,它们也会返回True.这会导致我正在阅读的文本不完整,因为在click()命令之后页面未完全加载.似乎在python中命令clickAndWait不可用(但同样,它可能无法解决问题,因为其他测试也失败).理想情况下,会有一个命令等待整个网页加载(无论页面的特定元素如何).
我设法通过在循环中手动插入time.sleep(5)来解决问题,但这是次优的,因为它可能会减慢整个过程.如果可能的话,最好只等待严格要求的时间.
谢谢
ayc*_*dee 18
从根本上说,如果页面是由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)
)
Run Code Online (Sandbox Code Playgroud)
get_via_css 是我自己的功能之一,但我希望它的作用相当清楚.
| 归档时间: |
|
| 查看次数: |
18299 次 |
| 最近记录: |