Selenium Python,Web驱动程序等待查找元素,查找元素不

时间:2016-05-31 02:19:12

标签: python-2.7 google-chrome selenium

下面的代码在没有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()

1 个答案:

答案 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