這里自制了一個(gè)頁面,上面有兩個(gè)文字鏈接,點(diǎn)擊兩個(gè)鏈接會(huì)彈出一模一樣的的兩個(gè)下拉菜單,這兩個(gè)菜單的屬性基本一樣。那么我如何區(qū)分找到相應(yīng)的菜單項(xiàng)呢?
方法如下:
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
import os
dr = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('level_locate.html')
dr.get(file_path)
#點(diǎn)擊Link1鏈接(彈出下拉列表)
dr.find_element_by_link_text('Link1').click()
#找到id 為dropdown1的父元素
WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_id('dropdown1').is_displayed())
#在父親元件下找到link為Action的子元素
menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')
#鼠標(biāo)定位到子元素上
webdriver.ActionChains(dr).move_to_element(menu).perform()
time.sleep(2)
dr.quit()
定位思路:
具體思路是:先點(diǎn)擊顯示出1個(gè)下拉菜單,然后再定位到該下拉菜單所在的ul,再定位這個(gè)ul下的某個(gè)具體的link。在這里,我們定位第1個(gè)下拉菜單中的Action這個(gè)選項(xiàng)。
---------------------------------------------------------------------
雖然我每行代碼前叫了注釋,但可能還是不太容易理解,因?yàn)槔锩娑嗔瞬簧僖郧皼]見過的新東東。
WebDriverWait(dr, 10)
10秒內(nèi)每隔500毫秒掃描1次頁面變化,當(dāng)出現(xiàn)指定的元素后結(jié)束。dr不解釋了,前面操作webdriver.firefox()的句柄
is_displayed()
該元素是否用戶可以見
class ActionChains(driver)
driver: 執(zhí)行用戶操作實(shí)例webdriver
生成用戶的行為。所有的行動(dòng)都存儲(chǔ)在actionchains對象。通過perform()存儲(chǔ)的行為。
move_to_element(menu)
移動(dòng)鼠標(biāo)到一個(gè)元素中,menu上面已經(jīng)定義了他所指向的哪一個(gè)元素
to_element:元件移動(dòng)到
perform()
執(zhí)行所有存儲(chǔ)的行為
------------------------------需要我們?nèi)粘9ぷ髦屑?xì)細(xì)品味、慢慢消化這些函數(shù)的用法