硒move_to_element并不总是鼠标悬停 [英] selenium move_to_element does not always mouse-hover
问题描述
我使用python 2.7。在试图将鼠标悬停在菜单项上时,硒并未在Chrome中始终将鼠标移至该项目。因此,当点击一个子菜单时,它最终会点击其他的东西。但是,相同的代码会在Firefox驱动程序中抛出异常。
我在SO上读了几篇文章,这表明硒有时会变得古怪。但我无法弄清楚我是否做错了。
以下是代码:
from selenium import webdriver
from time import sleep $ b $ from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
#driver = webdriver.Firefox()
driver.get(http://www.flipkart.com/watches/pr?p%5B%5D=facets.ideal_for%255B%255D%3DMen& (10)
$ b $ d
$ driver_maximize_window()
$ d $ $ b elm_Men_Menu = driver.find_element_by_xpath(// li [@ class ='menu-l0'] / a [@ data-tracking-id ='men'])
elm_FastTrack_Menu = driver.find_element_by_xpath(/ / li [@ class ='menu-item'] / a [@ data-tracking- id ='0_Fastrack'])
builder = ActionChains(driver)
builder.move_to_element elm_Menu).click(elm_FastTrack_Menu).perform()
您需要一步一步地检查要与之交互的元素的可见性 显式等待 ,请勿使用时间。 sleep()
- 它不可靠且容易出错:
from selenium import webdriver $ b $ se from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import通过
from selenium.webdriver.support.ui从selenium.webdriver.support中导入WebDriverWait
import expected_conditions as EC
driver = webdriver.Chrome()
driver.get(http://www.flipkart.com/watches/pr?p%5B% 5D = facets.ideal_for%255B%255D%3DMen& p%5B%5D = sort%3Dpopularity& sid = r18& facetOrder%5BD 5D = ideal_for& otracker = ch_vn_watches_men_nav_catergorylinks_0_AllBrands)
driver.maximize_window()
#等待Men菜单出现,然后将其悬停
men_menu = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,// a [@ data-tracking-id ='men'])))
ActionChains(driver).move_to_element(men_menu).perform()
#等待Fastrack菜单项出现,然后点击
fastrack = WebDriverWait(driver,10)。直到(EC.visibility_of_element_located((By.XPATH,// a [@ data-tracking-id ='0_Fastrack'])))
fastrack.click()
I am using python 2.7. While trying to hover the mouse on a menu item, selenium does not move the mouse to the item consistently in Chrome. Hence while clicking on a sub menu, it ends up clicking something else. However the same code throws exception in Firefox driver.
I read few posts on SO which indicates that selenium can be sometimes quirky. But I can't figure out whether I am doing something wrong.
Here is the code:
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
#driver = webdriver.Firefox()
driver.get("http://www.flipkart.com/watches/pr?p%5B%5D=facets.ideal_for%255B%255D%3DMen&p%5B%5D=sort%3Dpopularity&sid=r18&facetOrder%5B%5D=ideal_for&otracker=ch_vn_watches_men_nav_catergorylinks_0_AllBrands")
driver.maximize_window()
sleep(10)
elm_Men_Menu = driver.find_element_by_xpath("//li[@class='menu-l0 ']/a[@data-tracking-id='men']")
elm_FastTrack_Menu = driver.find_element_by_xpath("//li[@class='menu-item']/a[@data-tracking- id='0_Fastrack']")
builder = ActionChains(driver)
builder.move_to_element(elm_Men_Menu).click(elm_FastTrack_Menu).perform()
You need to do this step by step checking the visibility of the elements you are going to interact with using Explicit Waits, do not use time.sleep()
- it is not reliable and error-prone:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://www.flipkart.com/watches/pr?p%5B%5D=facets.ideal_for%255B%255D%3DMen&p%5B%5D=sort%3Dpopularity&sid=r18&facetOrder%5B%5D=ideal_for&otracker=ch_vn_watches_men_nav_catergorylinks_0_AllBrands")
driver.maximize_window()
# wait for Men menu to appear, then hover it
men_menu = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//a[@data-tracking-id='men']")))
ActionChains(driver).move_to_element(men_menu).perform()
# wait for Fastrack menu item to appear, then click it
fastrack = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//a[@data-tracking-id='0_Fastrack']")))
fastrack.click()
这篇关于硒move_to_element并不总是鼠标悬停的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!