Python 3.x Selenium:Edge webdriver在执行下一步之前不等待页面加载(python)

Python 3.x Selenium:Edge webdriver在执行下一步之前不等待页面加载(python),python-3.x,selenium,automated-tests,microsoft-edge,Python 3.x,Selenium,Automated Tests,Microsoft Edge,我正在使用selenium和Python编写一些测试。到目前为止,我的套件与Chrome和Firefox完美配合。但是,当我尝试使用Edge(EdgeHTML)时,相同的代码不起作用。我使用的是撰写本文时的最新版本,即17134版,版本:6.17134。我的测试在Windows 10上运行 问题是Edge没有等待页面加载。作为每个测试的一部分,首先执行登录。凭证已录入,表格已提交。Firefox和Chrome现在将等待我们重定向到的页面加载。但是,对于Edge,只要单击login submit按

我正在使用selenium和Python编写一些测试。到目前为止,我的套件与Chrome和Firefox完美配合。但是,当我尝试使用Edge(EdgeHTML)时,相同的代码不起作用。我使用的是撰写本文时的最新版本,即17134版,版本:6.17134。我的测试在Windows 10上运行

问题是Edge没有等待页面加载。作为每个测试的一部分,首先执行登录。凭证已录入,表格已提交。Firefox和Chrome现在将等待我们重定向到的页面加载。但是,对于Edge,只要单击login submit按钮,就会执行下一个代码,这当然会导致测试失败

这是一只有边缘的虫子吗?这似乎有点太基本了。是否需要以某种方式配置浏览器?我看不到文档中的任何内容

这是我们登录时使用最后一条语句运行的代码,导致重定向:

self.driver.find_element_by_id("login-email").send_keys(username)
self.driver.find_element_by_id("login-password").send_keys(password)
self.driver.find_element_by_id("login-messenger").click()
Edge决定不需要等待,然后将执行下一个代码,该代码将导航到受保护的页面。代码是:

send_page = SendPage(driver)
send_page.load_page()
简而言之:

self.driver.find_element_by_id("login-messenger").click()
# should wait now for the login redirect before excuting the line below but it does not!
self.driver.get(BasePage.base_url + self.uri)
我可能可以通过等待扩展页上的元素出现来执行变通方法,从而使边缘等待。这似乎不是正确的做法。我当然不想为了Edge而不断地进行侵入性的更改

请问我该怎么办

这是一只有边缘的虫子吗?这似乎有点太基本了,不可能成为 案例是否需要以某种方式配置浏览器?我 在文档中看不到任何内容

不,我认为这不是边缘浏览器的错误。由于浏览器性能之间的差异,边缘浏览器可能会花费更多的时间来加载页面

通常,我们可以使用,来等待页面加载

下面的代码块显示了如何等待页面加载完成。它使用超时。它等待一个元素显示在页面上(您需要一个元素id)。 然后,如果页面已加载,则显示页面已加载。如果超时时间(以秒为单位)已过,它将显示超时错误

更多详细信息,请查看以下文章


使用您的代码试用更新问题。您可以导入时间包并使用或等待页面加载。我可以执行WebDriverWait()并在页面上查找我知道应该加载的内容。它不会影响其他浏览器,但我不愿意做一些我认为不应该做的事情。这个问题的目的是看看这是否是一个已知的问题,有一个既定的解决方法,或者找出我是否做错了什么。
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get('https://pythonbasics.org')
timeout = 3
try:
    element_present = EC.presence_of_element_located((By.ID, 'main'))
    WebDriverWait(driver, timeout).until(element_present)
except TimeoutException:
    print("Timed out waiting for page to load")
finally:
    print("Page loaded")