本節(jié)重點:
ActionChains?類
??context_click()??右擊
??double_click()???雙擊
??drag_and_drop()??拖動
測試的產品中有一個操作是右鍵點擊文件列表會彈出一個快捷菜單怔檩,可以方便的選擇快捷菜單中的選擇對文件進行操作(刪除揽浙、移動冬念、重命名)提前,之前學習元素的點擊非常簡單:
driver.find_element_by_id(“xxx”).click()
那么鼠標的雙擊、右擊、拖動等是否也是這樣的寫法呢券敌?例如右擊:
driver.find_element_by_id(“xxx”).context_click()
經(jīng)過運行腳本得到了下面的錯誤提示:
AttributeError:?'WebElement'?object?has?no?attribute?'context_click'?
提示右點方法不屬于webelement?對象唾戚,通過查找文檔,發(fā)現(xiàn)屬于ActionChains?類待诅,但文檔中沒有具體寫法叹坦。這里要感謝?北京-QC-rabbit?的指點,其實整個python+selenium?學習過程都要感謝?北京-QC-rabbit?的指點卑雁。
下面介紹鼠標右鍵的用法募书,以快播私有云為例:
#coding=utf-8fromseleniumimport webdriverfromselenium.webdriver.common.action_chainsimport ActionChainsimport time
driver = webdriver.Firefox()
driver.get("http://passport.kuaibo.com/login/?referrer=http%3A%2F%2Fwebcloud.kuaibo.com%2F")#登陸快播私有云driver.find_element_by_id("user_name").send_keys("username")
driver.find_element_by_id("user_pwd").send_keys("123456")
driver.find_element_by_id("dl_an_submit").click()
time.sleep(3)#定位到要右擊的元素qqq =driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]")#對定位到的元素執(zhí)行鼠標右鍵操作ActionChains(driver).context_click(qqq).perform()'''#你也可以使用三行的寫法,但我覺得上面兩行寫法更容易理解
chain = ActionChains(driver)
implement = driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]")
chain.context_click(implement).perform()'''time.sleep(3)#休眠3秒driver.close()
這里需要注意的是测蹲,在使用ActionChains?類之前莹捡,要先將包引入。
右擊的操作會了扣甲,下面的其它方法比葫蘆畫瓢也能寫出來篮赢。
鼠標雙擊的寫法:
#定位到要雙擊的元素qqq =driver.find_element_by_xpath("xxx")#對定位到的元素執(zhí)行鼠標雙擊操作ActionChains(driver).double_click(qqq).perform()
鼠標拖放操作的寫法:
#定位元素的原位置element = driver.find_element_by_name("source")#定位元素要移動到的目標位置target =? driver.find_element_by_name("target")#執(zhí)行元素的移動操作ActionChains(driver).drag_and_drop(element, target).perform()
ActionChains?類不僅僅是只包含了上面的三個方法,下面將方法列出:
class?ActionChains(driver)
driver:The?WebDriver?instance?which?performs?user?actions.
Generate?user?actions.?All?actions?are?stored?in?the?ActionChains?object.?Call?perform()?to?fire?stored?actions.
–perform()
Performs?all?stored?actions.
–click(on_element=None)
Clicks?an?element.
on_element:The?element?to?click.?If?None,?clicks?on?current?mouse?position.
–click_and_hold(on_element)
Holds?down?the?left?mouse?button?on?an?element.
on_element:The?element?to?mouse?down.?If?None,?clicks?on?current?mouse?position.
–context_click(on_element)
Performs?a?context-click?(right?click)?on?an?element.
on_element:The?element?to?context-click.?If?None,?clicks?on?current?mouse?position.
–double_click(on_element)
Double-clicks?an?element.
on_element:The?element?to?double-click.?If?None,?clicks?on?current?mouse?position.
–drag_and_drop(source,?target)
Holds?down?the?left?mouse?button?on?the?source?element,?then?moves?to?the?target?element?and?releases?the?mouse?button.
source:The?element?to?mouse?down.
target:?The?element?to?mouse?up.
–key_down(key,?element=None)
Sends?a?key?press?only,?without?releasing?it.?Should?only?be?used?with?modifier?keys?(Control,?Alt?andShift).
key:The?modifier?key?to?send.?Values?are?defined?in?Keys?class.
element:The?element?to?send?keys.?If?None,?sends?a?key?to?current?focused?element.
–key_up(key,?element=None)
Releases?a?modifier?key.
key:The?modifier?key?to?send.?Values?are?defined?in?Keys?class.
element:The?element?to?send?keys.?If?None,?sends?a?key?to?current?focused?element.
–move_by_offset(xoffset,?yoffset)
Moving?the?mouse?to?an?offset?from?current?mouse?position.
xoffset:X?offset?to?move?to.yoffset:Y?offset?to?move?to.
–move_to_element(to_element)
Moving?the?mouse?to?the?middle?of?an?element.
to_element:?The?element?to?move?to.
–move_to_element_with_offset(to_element,?xoffset,?yoffset)
Move?the?mouse?by?an?offset?of?the?specificed?element.?Offsets?are?relative?to?the?top-left?corner?of?the
element.
to_element:?The?element?to?move?to.xoffset:X?offset?to?move?to.yoffset:Y?offset?to?move?to.
–release(on_element)
Releasing?a?held?mouse?button.
on_element:The?element?to?mouse?up.
–send_keys(*keys_to_send)
Sends?keys?to?current?focused?element.
keys_to_send:The?keys?to?send.
–send_keys_to_element(self,?element,*keys_to_send):
Sends?keys?to?an?element.
element:The?element?to?send?keys.keys_to_send:The?keys?to?send.