我正在尝试对可见元素执行鼠标悬停操作,然后单击隐藏的子菜单项。 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()
答案 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)
前者导致异常告诉我移动目标超出范围。
后者似乎更可靠,速度也更快。