下面的代码在没有sleep(1)
的Firefox中运行良好。
但是在chrome中,driver.find_element_by_xpath
失败了。
如果介于sleep(1)
之间,则可行。
//the wait below passes fine for both Chrome and Firefox.
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="taketour"]/div/div[1]/a/span')))
//In chrome this does not find the element.Works in firefox.
driver.find_element_by_xpath('//*[@id="taketour"]/div/div[1]/a/span').click()
在chrome中显示
ElementNotVisibleException: Message: Message: element not visible
以下代码适用于Chrome和Firefox
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="taketour"]/div/div[1]/a/span')))
sleep (1)
driver.find_element_by_xpath('//*[@id="taketour"]/div/div[1]/a/span').click()
答案 0 :(得分:2)
您无法点击尚未显示的元素,请使用期望条件visibility_of_element_located:
// Wait until element is visible
WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="taketour"]/div/div[1]/a/span')))
driver.find_element_by_xpath('//*[@id="taketour"]/div/div[1]/a/span').click()
或者更好的是,既然您正在尝试点击它,您也可以等到元素可点击:
// Wait until element is clickable
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="taketour"]/div/div[1]/a/span')))
driver.find_element_by_xpath('//*[@id="taketour"]/div/div[1]/a/span').click()
有关可用于检查元素状态的更多构建方便方法,请参阅Expected Conditions。