2016-06-10 155 views
1

此處存在嚴重問題。有人請幫忙。ajax填充菜單選項中的Selenium懸停/點擊事件

我正在嘗試登錄網站。 - 這工程!

重定向到登錄後需要的頁面 - 此工作!

現在一次,我到設置圖標所以下拉菜單可顯示懸停在,然後點擊「設置」選項NO ID或CLASS或HREF

現在有幾個原因我不能這樣做。數字1是,如果我試圖點擊懸停後的鏈接,它告訴我,它是隱藏的,我不能與它交互。此外,表格中的菜單選項在您懸停後通過ajax進行填充和追加,我認爲。他們不在最初的頁面加載。

wait = WebDriverWait(driver, 10) 

box = wait.until(EC.visibility_of_element_located((By.ID, "yucs-help_button"))) 

menuButton = driver.find_element_by_id("yucs-help_button") 

ActionChains(driver).move_to_element(menuButton).perform() 

經過上面的代碼部署我打印driver.page_source,可以看到(如下圖),新的菜單選項都在那裏,如果你不叮無縫的,下面的代碼將不會在頁面上。

現在我想點擊的<a><span>Settings</span>選項,對於我的生活來說,它是行不通的。要麼找不到它,不可點擊,不能與它交互等等,等等。xpath,css_selector,partial_name,什麼都沒有找到這個東西。還有什麼奇怪的是,一旦你點擊它,從瀏覽器,它將一個ID附加到<span>太奇怪了。有任何想法嗎?

<a data-ylk="rspns:nav;t3:tl-lst;t5:custitm;slk:custitm;elm:itm;elmt:custitm;itc:0;cpos:2" class="C(#000)! Td(u):h " data-mad="options" data-customevt="true" href="#" data-rapid_p="18"><span>Settings</span></a> 

回答

0

爲元素進行mouse over事件中,你應該嘗試使用以下java script使用.execute_script(): -

wait = WebDriverWait(driver, 10) 
box = wait.until(EC.visibility_of_element_located((By.ID, "yucs-help_button"))) 
menuButton = driver.find_element_by_id("yucs-help_button") 

driver.execute_script("var clickEvent = document.createEvent('MouseEvents');clickEvent.initEvent('mouseover', true, true); arguments[0].dispatchEvent(clickEvent);", menuButton) 

現在成功後mouse over你應該試着點擊如下Settings鏈接: -

driver.find_element_by_xpath("//span[contains(text(), 'Settings')]/parent::a[@data-mad = 'options']").click() 

希望它能幫助你.. :)