7

Ich benutze Python 2.7. Beim Versuch, die Maus über einen Menüeintrag zu bewegen, bewegt Selen die Maus in Chrome nicht gleichmäßig zum Objekt. Wenn man auf ein Untermenü klickt, klickt man auf etwas anderes. Derselbe Code löst jedoch eine Ausnahme im Firefox-Treiber aus.selen move_to_element bewegt sich nicht immer mit der Maus

Ich lese einige Beiträge auf SO, die darauf hinweist, dass Selen manchmal eigenartig sein kann. Aber ich kann nicht herausfinden, ob ich etwas falsch mache.

Hier ist der 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() 

Antwort

12

Sie müssen diesen Schritt tun, indem Schritt die Sichtbarkeit der Elemente überprüft Sie mit der Verwendung Explicit Waits zu interagieren werden, nicht time.sleep() nicht verwenden - es ist nicht zuverlässig und fehleranfällig:

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() 
Verwandte Themen