使用selenium實現UI自動化(三)
阿新 • • 發佈:2022-05-12
接上一篇,本章講其他常用操作
網頁操作中,我們會遇到多視窗以及多個frame的這種情況,selenium的示例如下:
#!/usr/bin/env python # -*-coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By class TestWindow: def setup(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(5)def teardown(self): self.driver.quit() def test_switch_window(self): self.driver.get("http://www.hao123.com") self.driver.maximize_window() current_window = self.driver.current_window_handle print("初始:{}".format(current_window)) self.driver.find_element(by=By.LINK_TEXT, value="hao123推薦").click() handles = self.driver.window_handles print("所有的視窗:{}".format(handles)) self.driver.switch_to.window(handles[1]) self.driver.find_element(by=By.LINK_TEXT, value="娛樂").click() print("第二次切換後的視窗:{}".format(self.driver.current_window_handle)) self.driver.switch_to.window(handles[0])print("最後切換會第一個視窗:{}".format(self.driver.current_window_handle))
操作步驟和我們切換瀏覽器的步驟一致。切換frame和視窗的方式大致一樣,如下:
:Args: - frame_reference: The name of the window to switch to, an integer representing the index, or a webelement that is an (i)frame to switch to. :Usage: :: driver.switch_to.frame('frame_name') driver.switch_to.frame(1) driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe")[0])
selenium的多瀏覽器的處理
新建一個base類,然後類中起setup和teardown方法,然後在setup中起多個if,elif做判斷,最後測試類繼承base類就可以了
selenium執行js程式碼
這裡主要是用來處理selenium無法處理的一些動作,比如日期控制元件無法輸入之類的
driver.execute_script(js程式碼塊) #同步執行,執行完畢js後才進行其他動作
driver.execute_async_script(js程式碼塊)#非同步執行,阻塞後,不會等待js執行完畢才執行其他命令
括號內是要執行的js程式碼塊,假如需要有個js程式碼塊的返回,在程式碼塊前面加上 return js程式碼塊就可以了
多個命令的話,多個命令之間使用;隔開
driver.execute_async_script(js程式碼塊1;js程式碼塊2)
檔案上傳
input標籤的話,先找到元素,然後點選對應的按鈕,然後定位到對應的元素後直接使用sendkeys('path/picture.png')即可
檔案彈框處理
alert彈窗的話,操作步驟和多視窗類似,如下:
#表示接受alert彈窗
driver.switch_to.alert.accept()
#表示解散alert彈窗
driver.switch_to.alert.dismiss()
#返回初始頁面
driver.switch_to.default_content()
本次內容就到這裡了。