在selenium自動化中用的最多的就是webdriver了,通過webdriver可以操作瀏覽器以及網(wǎng)頁上的控件缕粹,這里對webdriver常用方法進行匯總稚茅,以便參考
1. 什么是 WebDriver?
? ? * WebDriver是針對各個瀏覽器而開發(fā),與瀏覽器的緊密集成支持創(chuàng)建更高級的測試致开。除了來自瀏覽器廠商的支持峰锁,WebDriver還利用操作系統(tǒng)級的調(diào)用模擬用戶輸入萎馅。WebDriver支Firefox(FirefoxDriver)双戳、IE (InternetExplorerDriver)、Opera(OperaDriver)和Chrome(ChromeDriver)糜芳。它還支持Android?(AndroidDriver)和iPhone(IPhoneDriver)的移動應(yīng)用測試飒货。它還包括一個基于HtmlUnit的無界面實現(xiàn)魄衅,稱為HtmlUnitDriver。WebDriver?API可以通過Python塘辅、Ruby晃虫、Java和C#訪問,支持開發(fā)人員使用他們偏愛的編程語言來創(chuàng)建測試扣墩。
2. 如何調(diào)用不同瀏覽器的WebDriver哲银?
? ? * 調(diào)用IE瀏覽器的webdriver:
????????driver = webdriver.Ie()
? ? * 調(diào)用Chrome瀏覽器的webdriver:
????????driver = webdriver.Chrome()
? ? * 調(diào)用Firefox的webdriver:
????????driver = webdriver.Firefox()
? ? * 調(diào)用Opera的webdriver:
????????driver = webdriver.Opera()
? ? * 調(diào)用Htmlunitdriver:
????????driver = webdriver.Remote(desired_capabilities=DesiredCapabilities.HTMLUNIT)
3. 針對瀏覽器本身的一些常用操作:
? ? * 訪問某個網(wǎng)站鏈接(例如訪問百度):driver.get("http://www.baidu.com")
? ? *?瀏覽器最大化:driver.maximize_window()
? ? *?設(shè)置瀏覽器的寬和高:driver.set_window_size(480,800)
? ? ?(#寬為480,高為800)
? ? * 瀏覽器的前進:driver.forward()
? ? *?瀏覽器的后退:driver.back()
4. 元素定位呻惕,元素定位實例請看另一篇'WebDriver 元素定位實例'
? ? * webdriver 提供了一系列的元素定位方法荆责,常用的有以下幾種: (id,name ,? class name, tag ????????name, link text,partial link text,xpath, cssselector)
? ? * 分別對應(yīng) python webdriver 中的方法為:
????????§find_element_by_id()
????????§find_element_by_name()
????????§find_element_by_class_name()
????????§find_element_by_tag_name()
????????§find_element_by_link_text()
????????§find_element_by_partial_link_text()
????????§find_element_by_xpath()
????????§find_element_by_css_selector()
5.?定位只是第一步,定位之后需要對這個對象進行操作亚脆,webdriver 中最常用的操作元素的方法有下面幾個:
? ? * clear()清除元素的內(nèi)容
? ? * send_keys() 在元素上輸入內(nèi)容
? ? * click()單擊元素
? ? * select_by_XX() 選擇下拉框內(nèi)容
6.?鼠標事件常用方法:
? ? * context_click() 右擊
? ? * double_click() 雙擊
? ? * drag_and_drop() 拖動
? ? * move_to_element() 鼠標懸停在一個元素上
? ? * click_and_hold() 按下鼠標左鍵在一個元素上
7. 獲取頁面信息
? ? * 獲取當(dāng)前頁面的title做院,打印
? ? ? ? title = driver.title()
? ? ? ? print title
? ? * 獲取當(dāng)前頁面的url,打印
? ? ? ? url = driver.current_url()
? ? ? ? print url
? ? * 獲取控件文本信息并打印
? ? ? ? text = driver.find_element_by_id('user_id').text()
? ? ? ? print text
8. 操作彈出框
? ? *接受警告信息
????????alert = driver.switch_to_alert()
????????alert.accept()
? ? * 得到文本信息并打印
????????alert = driver.switch_to_alert()
????????print alert.text()
? ? * 取消對話框
????????alert = driver.switch_to_alert()
????????alert.dismiss()
9. 有時候濒持,一個網(wǎng)頁會劃分成多個frame键耕,如果突然定位不到元素了,不妨看看要定位的元素是否不再當(dāng)前所在的frame中
? ? * 定位Frame中的元素柑营,必須先切換到元素所在的frame中屈雄,以切換上圖不同的frame為例:
????????切換到topFrame
?????????????self.driver.switch_to.parent_frame()
? ? ? ? ????self.driver.switch_to.frame('topFrame’)
????????切換到mainFrame
? ? ? ? ????self.driver.switch_to.parent_frame()
?????????????self.driver.switch_to.frame('mainFrame‘)
????????切換到leftFrame
? ????????self.driver.switch_to.parent_frame()
? ????????self.driver.switch_to.frame('lefFrame')?
10. 瀏覽器多窗口切換
? ? * 有時候我們在測試一個 web應(yīng)用時會出現(xiàn)多個瀏覽器窗口的情況,webdriver提供了相關(guān)相方法可以很輕松的在多個窗口之間切換并操作不同窗口上的元素官套。
????* 獲得當(dāng)前窗口句柄
????????current_window_handle()
? ? * 返回的所有窗口的句柄到當(dāng)前會話
????????window_handles()
? ? * 用于處理多窗口操作的方法
????????switch_to_window()
? ? * 關(guān)閉當(dāng)前窗口
????????close()