python selenium:move_to_element()无效

时间:2017-03-06 10:47:22

标签: python selenium selenium-chromedriver

我正在尝试对可见元素执行鼠标悬停操作,然后单击隐藏的子菜单项。 move_to_element()似乎与ChromeDriver无法合作。但是,运行代码没有例外,只是动作没有发生。

我还在操作和sleep()之间尝试了webDriverWait,它显示了运行代码的超时。 我使用的是带有python 2.7和selenium 3.0.2的chrome 56.0。

以下是HTML代码

 <a class="dropdown-toggle" href="about-us.html" data-toggle="dropdown" role="button" aria-expanded="false">
 About
 <i class="caret"></i>
 </a>   

<li>
<a href="about.html">Introduction</a>
</li> 

以下是我的测试用例的一部分

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains


   mainmenu = driver.find_element_by_xpath("path_to_about_element")
   submenu =driver.find_element_by_xpath("path_to_introduction_element")
   action=ActionChains(driver)
   action.move_to_element(mainmenu)        
   action.move_to_element(submenu)        
   action.click().perform()

6 个答案:

答案 0 :(得分:1)

尝试以下代码并告诉我结果:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

mainmenu = driver.find_element_by_link_text("About")
action=ActionChains(driver)
action.move_to_element(mainmenu).perform()
submenu = wait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "Introduction")))
submenu.click()

这应该执行鼠标悬停在mainmenu元素上并等待submenu元素存在和可点击性

答案 1 :(得分:1)

我遇到了类似的问题,并使用move_to_element_with_offset()而不是move_to_element()解决了这个问题。将move_to_element(myElement)呼叫更改为:

move_to_element_with_offset(myElement, 0, 0) # 0, 0 specifies no offset

答案 2 :(得分:0)

使用以下代码,如果仍然面临同样的问题,请告知我们:

mainmenu = driver.find_element_by_xpath("path_to_about_element")
submenu =driver.find_element_by_xpath("path_to_introduction_element")
action=ActionChains(driver)
action.move_to_element(mainmenu).move_to_element(submenu).click().build().perform()      

答案 3 :(得分:0)

感谢您的帮助。我终于发现如果物理光标在浏览器窗口内,moveToElement()不起作用。这是ChromeDriver的一个已知问题。

https://bugs.chromium.org/p/chromedriver/issues/detail?id=605

答案 4 :(得分:0)

这可能有效:-

find . -type f -printf '%f\n' | sed 's/^.*\.//' | sort -u

答案 5 :(得分:0)

我也刚刚意识到,两者之间存在差异:

ActionChains(driver).move_to_element_with_offset(element, 0, 0).perform()

driver.execute_script('arguments[0].scrollIntoView();', element)

前者导致异常告诉我移动目标超出范围。

后者似乎更可靠,速度也更快。