1. 程式人生 > 其它 >Selenium-Switch與SelectApi介面詳解

Selenium-Switch與SelectApi介面詳解

Switch

我們在UI自動化測試時,總會出現新建一個tab頁面、彈出一個瀏覽器級別的彈框或者是出現一個iframe標籤,這時我們用WebDriver提供的Api介面就無法處理這些情況了。需要用到Selenium單獨提供的模組switch_to模組

引用路徑

# 第一種方式可以通過直接匯入SwitchTo模組來進行操作
from selenium.webdriver.remote.switch_to import SwitchTo

# 第二種方式是直接通過Webdriver的switch_to來操作
driver.switch_to

其實webdriver在以前的版本中已經為我們封裝好了切換Windows、Alert、Iframe,現在依然可以使用,但是會被打上橫線,代表他已經過時了,建議使用SwitchTo類來進行操作。

SwitchToWindows

handles = driver.window_handles

# SwitchToWindows接受瀏覽器TAB的控制代碼
driver.switch_to.window(handles[1])

SwitchToFrame

# SwitchToFrame支援id、name、frame的element

# 接受定位到的iframe的Element,這樣就可以通過任意一種定位方式進行定位了
frameElement = driver.find_element_by_name('top-frame')
driver.switch_to.frame(frameElement)

# 通過fame的name、id屬性定位
driver.switch_to.frame('top-frame')

# 當存在多層iframe巢狀時,需要一層一層的切換查詢,否則將無法找到
driver.switch_to.frame('top-frame')
driver.switch_to.frame(
'baidu-frame')

# 跳轉到最外層的頁面
driver.switch_to.default_content()

# 多層Iframe時,跳轉到上一層的iframe中
driver.switch_to.parent_frame()

SwitchToAlert

# alert 實際上也是Selenium的一個模組
from selenium.webdriver.common.alert import Alert

# 也可以通過Webdriver的switch_to來呼叫

# 點選確認按鈕
driver.switch_to.alert.accept()

# 如果是確認彈框,相當於點選需要和X按鈕
driver.switch_to.alert.dismiss()

# 如果alert上有文字框時,可以輸入文字。(注: 沒遇到過)
driver.switch_to.alert.send_keys()

# 返回Alert上面的文字內容
text = driver.switch_to.alert.text

Select

在UI自動化測試過程中,經常會遇到一些下拉框,如果我們基於Webdriver操作的話就需要click兩次,而且很容易出現問題,實際上Selenium給我們提供了專門的Select(下拉框處理模組)。

引用路徑

from selenium.webdriver.support.select import Select

Select操作

# 通過select選項的索引來定位選擇對應選項(從0開始計數)
Select(s).select_by_index(5)

# 通過選項的value屬性值來定位
Select(s).select_by_value('2')

# 通過選項的文字內容來定位
Select(s).select_by_visible_text('牡丹江')

# 返回第一個選中的optionElement物件
Select(s).first_selected_option

# 返回所有選中的optionElement物件
Select(s).all_selected_options

# 取消所有選中的option
Select(s).deselect_all()

# 通過option的index來取消對應的option
Select(s).deselect_by_index(1)

# 通過value屬性,來取消對應option
Select(s).deselect_by_value('')

# 通過option的文字內容,取消對應的option
Select(s).deselect_by_visible_text('')

舉例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:chenshifeng
@file:test_select.py
@time:2020/11/13
"""
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.select import Select

class TestSelect:
def setup_method(self):
self.driver
= webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicitly_wait(
5)

</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> teardown_method(self):
    self.driver.quit()
    </span><span style="color: rgba(0, 0, 255, 1)">pass</span>

<span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_select(self):
    self.driver.get(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">http://sahitest.com/demo/selectTest.htm</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
    s1 </span>= self.driver.find_element_by_id(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">s1Id</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
    Select(s1).select_by_index(</span>1<span style="color: rgba(0, 0, 0, 1)">)
    s2 </span>= self.driver.find_element_by_id(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">s2Id</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
    Select(s2).select_by_value(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">o2</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
    sleep(</span>3)</pre>

執行結果

轉載自https://www.cnblogs.com/feng0815/p/8353867.html