WebdriverWait显示TimeoutException,如果我使用sleep.time,它工作正常



在Python Webdriver中单击元素时,我想使用WebdriverWait for。

使用WebdriverWait时,我收到以下TimeoutException错误:

Traceback (most recent call last):
  File "C:Usersriaz.ladhaniPycharmProjectsSelenium WebdriverClearCoreTestCasesAdministrationPage_TestCase.py", line 30, in test_add_Project
    administration_page = login_page.clickAdministration()
  File "C:Usersriaz.ladhaniPycharmProjectsSelenium WebdriverClearCorePageslogin.py", line 46, in clickAdministration
    WebDriverWait (self.driver, 10).until(lambda d: self.driver.find_element(*MainPageLocators.AdministrationButton_xpath).click())
  File "C:Python27libsite-packagesseleniumwebdriversupportwait.py", line 75, in until
    raise TimeoutException(message, screen, stacktrace)
TimeoutException: Message: 

如果我使用time.sleep(10),它可以正常工作并单击元素。我已将所有链接恢复为time.sleep,直到WebdriverWait正常工作。

我的WebdriverWait代码片段是:

class LoginPage(BasePage):
    #Click Administration from top menu
    def clickAdministration(self):
        WebDriverWait (self.driver, 10).until(lambda d: self.driver.find_element(*MainPageLocators.AdministrationButton_xpath).click())
        #time.sleep(10)
        return AdministrationPage(self.driver)

进口是:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException

class LoginPage_TestCase(unittest.TestCase):
     def test_add_Project(self):
        login_page = login.LoginPage(self.driver)
        login_page.userLogin_valid()
        administration_page = login_page.clickAdministration()

我的WebdriverWait语法正确吗?为什么会出现超时异常?

如果我使用time.sleep(secs),它可以很好地工作,但不是最有效的方法。

您没有正确使用Explicit Wait-您需要使用Expected Conditions-可重复调用,直到返回True。您返回的是返回Noneclick()方法的结果,这是错误的-期望的条件永远不会返回True,因此,您得到的是TimeoutException

在这种情况下,内置的element_to_be_clickable非常适合,例如:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
wait = WebDriverWait(self.driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[@class="test"]')))
element.click()
wait = WebDriverWait(driver, 10)
paragraph = wait.until(EC.element_to_be_located((By.CSS_SELECTOR,"body > p:nth-child(3)")))
paragraph.getText()

最新更新