我正在尝试在2个不同的页面上执行相同的测试中的move_to_element(没有拆除)并且我得到StaleElementException
抛出。
该测试基本上是一个电子商务网站,我必须将鼠标悬停在某个产品上,以便可以选择将其添加到购物车中。在主页上,我必须将鼠标悬停在菜单上才能进入产品类别。
我在下面添加了一个功能(这就是我使用的功能)。它处理弹出窗口然后退出并再次尝试的情况。
@staticmethod
def hover_over(some_element):
try:
action.move_to_element(wait.until(EC.visibility_of_element_located((some_element)))).perform()
except WebDriverException:
try:
pop = browser.find_element(*popup_exit_class)
pop.click()
wait.until(EC.visibility_of_element_located((some_element)))
action.move_to_element(wait.until(EC.visibility_of_element_located((some_element)))).perform()
我也试过没有这个功能:
x = browser.find_element(*some_element)
action.move_to_element(x).perform()
sleep(0.5)
browser.find_element(*some_other_element).click()
如果我在Ubuntu 14.04上使用Chromedriver(它也出现在Firefox上)有任何帮助
答案 0 :(得分:0)
网页元素附加到网页上。如果重新加载页面,则会删除您的元素并创建一个新元素。这就是您获得StaleElementException
例外的原因。此外,您需要为每个调用实例化ActionChains:
some_element = (By.ID, "...")
element = wait.until(EC.visibility_of_element_located(some_element))
ActionChains(driver).move_to_element(element).perform()
browser.find_element(*popup_exit_class).click()
element = wait.until(EC.visibility_of_element_located(some_element))
ActionChains(driver).move_to_element(element).perform()