2016-11-07 7 views
1

Ich verwende Selenium in Python, um zu versuchen, auf einen Link in einem Dropdown-Menü zu klicken, das angezeigt wird, wenn der Mauszeiger über dieses Dropdown-Menü bewegt wird. Hier ist die Drop-Down-Menü Info:Klicken Sie auf Verdeckte Verknüpfung mit Selenium in Python

<div id="DownloadMenu"> 
    <ul id="DownloadMenu_control" class="topmenu" widgetid="DownloadMenu_control"> 
    <li class="horizontal-list-item-2 leftFloatedItem" id="[email protected]_1" widgetid="[email protected]_1" style=""> 
    <a class="horizontal-list-item-2 leftFloatedItem" href="javascript:void(0)">Download</a> 
    <ul id="common_navigation_MenuControl_6" class="submenu" style="display: none; left: 0px; visibility: hidden;" widgetid="common_navigation_MenuControl_6"> 
    <li class="subitems" id="[email protected]" widgetid="[email protected]"> 
    <a href="javascript:com.reuters.rts.event(event, 'openMultiDocInfoViewerBatchViewEikon', 'itemsCollectionId', 'AllDocumentListView_items', 'researchTableManagerId', 'AllDocumentListView', 'summary', escape(encodeURIComponent(dijit.byId('advancedSearchManager').getFilterSubmittedSummary())), 'fileSizeLimitForMerging', '25','forBatchPrint','true', 'action','Save');">Documents</a> 
    </li> 
    </ul> 
    </li> 
    </ul> 
</div> 

ich auf dem "Documents" Link in dem "a href" -Tag zu klicken versuchen. Wenn ich über das Menü bewegen, ändert sich der Code wie folgt:

<div id="DownloadMenu"> 
    <ul id="DownloadMenu_control" class="topmenu" widgetid="DownloadMenu_control"> 
    <li class="topitemOn" id="[email protected]_1" widgetid="[email protected]_1" style=""> 
    <a class="horizontal-list-item-2 leftFloatedItem" href="javascript:void(0)">Download</a> 
    <ul id="common_navigation_MenuControl_6" class="submenu" style="display: none; left: 0px;" widgetid="common_navigation_MenuControl_6"> 
    <li class="subitems" id="[email protected]" widgetid="[email protected]"> 
    <a href="javascript:com.reuters.rts.event(event, 'openMultiDocInfoViewerBatchViewEikon', 'itemsCollectionId', 'AllDocumentListView_items', 'researchTableManagerId', 'AllDocumentListView', 'summary', escape(encodeURIComponent(dijit.byId('advancedSearchManager').getFilterSubmittedSummary())), 'fileSizeLimitForMerging', '25','forBatchPrint','true', 'action','Save');">Documents</a> 
    </li> 
    </ul> 
    </li> 
    </ul> 
</div> 

Sie können sehen, dass die Sichtbarkeit: versteckt Teil in der zweiten ul-Tag geht weg.

download_menu = driver.find_element_by_id("DownloadMenu") 
download_button = download_menu.find_elements_by_tag_name('a')[1] 

Wenn ich versuche, den Download-Button klicken mit:

download_button.click() 

Ich erhalte eine Fehlermeldung, dass das Element nicht ist

Ich habe die Elemente auf der Seite mit dem folgenden Code gefunden sichtbar:

ElementNotVisibleException: Message: element not visible 

Also habe ich versucht,

ActionChains(driver).move_to_element(download_menu).move_to_element(download_button).click(download_button).perform() 

Wenn ich das tue, passiert nichts. Also habe ich versucht, das Skript ausgeführt wird das Menü sichtbar zu machen und dann auf und das hat nicht funktioniert:

visibility_tag = download_menu.find_elements_by_tag_name('ul')[1] 
driver.execute_script("arguments[0].style.display = 'block'; arguments[0].style.left = '0px'; arguments[0].style.visibility = ''", visibility_tag) 

Wenn ich die execute_script Funktion ausführen, wird das Menü in meinem Browser sichtbar werden. Es kann nur noch nicht geklickt werden. Ich werde hier verrückt. Irgendwelche Ideen? Ich verwende die Chrome-Erweiterung von Selenium in Python.

+0

sehen, ob iframe.try wie eine mit CSS: „#DownloadMenu a [href * = Dokument] " – lauda

Antwort

3

sollten Sie versuchen, ExplicitWaits mit bis Documents Link sichtbar warten und ermöglichen, wie unten klicken: -

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

wait = WebDriverWait(driver, 10) 

download_menu = driver.find_element_by_id("DownloadMenu") 

action = ActionChains(driver) 
#hover on download_menu first 
action.move_to_element(download_menu).perform() 

#now find Documents link and click 
documents = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Documents"))) 
documents.click() 
+1

Danke! Das habe ich vermisst. Ich schätze es!!!! – myname

Verwandte Themen