我想在Python Webdriver中单击元素时使用WebdriverWait。 使用WebdriverWait时出现以下TimeoutException错误:
Traceback (most recent call last):
File "C:\Users\riaz.ladhani\PycharmProjects\Selenium Webdriver\ClearCore\TestCases\AdministrationPage_TestCase.py", line 30, in test_add_Project
administration_page = login_page.clickAdministration()
File "C:\Users\riaz.ladhani\PycharmProjects\Selenium Webdriver\ClearCore\Pages\login.py", line 46, in clickAdministration
WebDriverWait (self.driver, 10).until(lambda d: self.driver.find_element(*MainPageLocators.AdministrationButton_xpath).click())
File "C:\Python27\lib\site-packages\selenium\webdriver\support\wait.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
语法是否正确?为什么TimeoutException?
如果我使用time.sleep(secs)
,它可以正常工作,但不是最有效的方法。
答案 0 :(得分:9)
您没有正确使用显式等待 - 您需要使用预期条件 - 在返回it('renders 4 links', function() {
var categories = TestUtils.renderIntoDocument(<categoriesWithContext />, {});
var ul = TestUtils.findRenderedDOMComponentWithTag(categories, 'ul');
var lis = TestUtils.scryRenderedDOMComponentsWithTag(ul, 'li');
lis.forEach(function(li) {
// this should throw if <a/> is not found
var a = TestUtils.findRenderedDOMComponentWithTag(li, 'a');
// but write an explicit expectation anyway
expect(a);
});
});
之前重复调用的可调用对象。您将返回True
方法的结果,该方法返回click()
这是假的 - 预期条件永远不会返回None
,因此,您将获得True
。
在这种情况下,内置element_to_be_clickable
非常适合,例如:
TimeoutException
答案 1 :(得分:0)
wait = WebDriverWait(driver, 10)
paragraph = wait.until(EC.element_to_be_located((By.CSS_SELECTOR,"body > p:nth-child(3)")))
paragraph.getText()