1. 程式人生 > 其它 >使用selenium實現UI自動化(三)

使用selenium實現UI自動化(三)

接上一篇,本章講其他常用操作

 網頁操作中,我們會遇到多視窗以及多個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()

本次內容就到這裡了。