selenium的介紹和使用(持續更新中)

前言:PO模式會在本文介紹,Appium章節不再敘述
1、selenium的介紹
官方網站:https://www.selenium.dev/
在這裏插入圖片描述
2、selenium的架構圖
在這裏插入圖片描述
3、selenium的環境配置步驟
在這裏插入圖片描述
4、driver的配置
chromedriver與chrome的對應關係表:https://huilansame.github.io/huilansame.github.io/archivers/chromedriver-to-chrome-version
chrome版本與對應的谷歌驅動(chromedriver):
https://www.cnblogs.com/yfacesclub/p/8482681.html
chromedriver:http://chromedriver.storage.googleapis.com/index.html
淘寶鏡像:http://npm.taobao.org/mirrors/chromedriver
geckodriver:https://github.com/mozilla/geckodriver/releases
建議將驅動直接放在python的根目錄下,如果用的venv環境,也要放在venv環境下(一定要重啓IDE
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
5、如何在python調用selenium
在這裏插入圖片描述
6、seleniumIDE的下載和安裝
在這裏插入圖片描述
7、IDE的啓動
在這裏插入圖片描述
8、錄製第一個用例
在這裏插入圖片描述

9、IDE的使用
在這裏插入圖片描述
10、管理用例
在這裏插入圖片描述
11、擴展(代碼的導出功能)
在這裏插入圖片描述
12、python selenium文檔(用例編寫)
在這裏插入圖片描述
13、用例的關鍵要素
在這裏插入圖片描述
14、selenium 的三種等待方式
直接等待:time.sleep(3) ——不建議使用,遇到網絡不好的情況會超時
在這裏插入圖片描述
隱式等待:self.driver.implicitly_wait(3) ——缺點:這是全局等待,會造成不同場景不好設置等待時間,過長或者過短都不好
在這裏插入圖片描述
顯式等待:WebDriverWait配合until()和until_not()方法,根據判斷條件進行等待
在這裏插入圖片描述

實戰演練
“”"
import pytest

from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions

class TestPut():
def setup(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicitly_wait(5)

def teardown(self):
    sleep(5)
    self.driver.quit()

def test_case_a(self):
    self.driver.get("https://blog.csdn.net/weixin_44275820?t=1")
    WebDriverWait(self.driver, 10).until(
        expected_conditions.element_to_be_clickable(By.XPATH, '//*[@id="mainBox"]/main/div[2]/div[2]/h4/a'))

    self.driver.find_element(By.XPATH, '//*[@id="mainBox"]/main/div[2]/div[1]/h4/a').click()

if name == ‘main’:
pytest.main([’-v’, ‘-s’])
“”"
15、web控件定位與常見操作
selenium的輸入與點擊
輸入內容:find_element(By.ID,‘123’).send_keys(“輸入你想要的內容”)

點擊:find_element(By.ID,‘456’).clcik()

xpath定位
優點:無論是selenium還是appium都可以定位,是一個萬能的定位方式
缺點:運行速度比css慢很多,因爲它是從頭到尾的去遍歷
在這裏插入圖片描述
在這裏插入圖片描述
在瀏覽器的控制檯上可以用$x()查看xpath定位是否成功
$x(’//*[@id=“blogTitle”]//a[1]’)

在這裏插入圖片描述
css定位(適用於css樣式定位)
css定位不使用與appium,因爲appium原生的框架不支持,但是當app嵌入了網頁時,這個時候可以用css定位
在這裏插入圖片描述
在這裏插入圖片描述
在瀏覽器的控制檯上可以用$()查看xpath定位是否成功
$(’[id=blogTitle]’)
在這裏插入圖片描述
在這裏插入圖片描述
其餘定位方式暫不介紹,無論時ID定位還是NAME定位,都是基於css定位封裝的
16、web控件交互
官方文檔:https://selenium-python.readthedocs/io.api.html
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
點擊、雙擊、右鍵操作
在這裏插入圖片描述
鼠標移動
在這裏插入圖片描述
特俗操作介紹:拖拽

element_d = self.driver.find_element(By.LINK_TEXT, 'abc')

        element_e = self.driver.find_element(By.LINK_TEXT, 'def')
        action = ActionChains(self.driver)
        '''
        action.drag_and_drop(element_d, element_e).perform()    #方法一拖拽
        action.click_and_hold(element_d).release(element_e).perform()   #方法二拖拽
        action.click_and_hold(element_d).move_to_element(element_e).release().perform() #方法三拖拽
        '''

模擬按鍵操作
在這裏插入圖片描述
ActionCHains只能對web操作,這裏就要介紹另外一種方法,既可以對web,也可以對H5進行操作
在這裏插入圖片描述

import pytest
from selenium import webdriver
from selenium.webdriver import TouchActions
from selenium.webdriver.common.by import By
from time import sleep


class TestTouchAction():
    def setup(self):
        option = webdriver.ChromeOptions()
        option.add_experimental_option('w3c', False)
        self.driver = webdriver.ChromeOptions(options=option)
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()

    def teardown(self):
        self.driver.quit()

    def test_touchaction_scollbottom(self):
        self.driver.get('https://www.baidu.com')
        el = self.driver.find_element(By.ID, 'kw')
        el_search = self.driver.find_element(By.ID, 'su')

        el.send_keys("python難不難")
        action = TouchActions(self.driver)
        action.tap(el_search)
        action.perform()
        action.scroll_from_element(el, 0, 10000).perform()

if __name__ == '__main__':
    pytest.main(['-v', '-s'])

表單的操作
在這裏插入圖片描述
多窗口處理與網頁frame
在這裏插入圖片描述
多窗口處理
在這裏插入圖片描述

在操作頁面時,我們經常會遇到點擊某個鏈接,彈出新的窗口,這時候需要切換到新開的窗口上進行操作,webdriver提供了相應的方法,可以實現在不同窗口之間的切換。這個方法就是switch_to.window()

首先獲取當前窗口的句柄:current_window = driver.current_window_handle

當打開新的窗口之後,獲取當前打開的所有窗口句柄:all_handles = driver.window_handles

通過for循環及if語句,進入新打開的窗口。代碼參考:

for handle in all_handles:

    if handle != current_window:

        driver.switch_to.window(handle)



回到之前的窗口

for handle in all_handles:

    if handle == current_window:

        driver.switch_to.window(handle)
例子如下:
current_window = driver.current_window_handle#獲得當前窗口
time.sleep(2)
driver.find_element_by_xpath('//*[@id="proList"]/li/div/div[2]/span/a').click()#打開Belle/百麗冬黑絨時尚優雅羊絨皮女短靴BOU50DD7新窗口
time.sleep(3)
all_handles = driver.window_handles#獲得所有窗口、
for handle in all_handles:#通過for循環及if語句,進入新打開的窗口
    if handle != current_window:
        driver.switch_to.window(handle)
time.sleep(5)
driver.find_element_by_xpath('//*[@id="imgBtn_0"]/span[2]/a[2]/img').click()#點擊棕色

frame介紹
在這裏插入圖片描述
多frame切換
在這裏插入圖片描述
處理嵌套的iframe
在這裏插入圖片描述
17、selenium多瀏覽器處理

import os
from selenium import webdriver

class base():
    def setup(self):
        browser =os.getenv("browser")
        if browser == 'firefox':
            self.driver =webdriver.Firefox()
        elif browser == 'headless':
            self.driver=webdriver.PhantomJS()
        else:
            self.driver=webdriver.Chrome()
		self.driver.implicitly_wait(10)
        self.driver.maximize_window()

18、通過selenium執行javaScript腳本
在這裏插入圖片描述
document.title——獲取網站title
在這裏插入圖片描述
window.alert(“你在幹嘛”)——模擬alert操作在這裏插入圖片描述
JSON.stringify(performance.timing)——獲取性能數據
在這裏插入圖片描述
selenium怎麼調用js
在這裏插入圖片描述
js 提供的定位方法
在這裏插入圖片描述
js 的滑動
document.documentElement.scrollTop=10000
當數值設定超出界限時,js滑動到底部,當數值爲0時,滑動到首頁,不同的數值滑動的範圍不同
在這裏插入圖片描述
js處理時間控件
測試網站:https://trains.ctrip.com
a = document.getElementById(“dateObj”)
a.removeAttribute(‘readonly’)
a.value=‘2020-05-01’
先定位到元素賦值給變量a,再移除變量a的readonly屬性,最後重新給a的value賦值,這個時間控件我們就修改成功了
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
19、文件上傳、彈窗處理
在這裏插入圖片描述
在這裏插入圖片描述
20、Page Object的介紹(重點)

Page Object的設計模式

我們要操作細和驗證分開,當我們頁面元素等有改動時,我們只需要改動操作細節裏的代碼,而它提供一個方法給驗證,從而驗證裏面的代碼我們不需要做修改
在這裏插入圖片描述
模式的介紹可以看下官方文檔
http://martinfowler.com/bliki/PageObject.html
在這裏插入圖片描述
Page Object的六大原則

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
PO是什麼:
1、頁面對象模型(PO)是一種設計模式,用來管理維護一組web元素的對象庫
2、在PO下,應用程序的每一個頁面都有一個對應的page class
3、每一個page class維護着該web頁的元素集和操作這些元素的方法
4、page class中的方法命名最好根據對應的業務場景進行,例如通常登錄後我們需要等待幾秒鐘,

PO的優勢:
1、PO提供了一種業務流程與頁面元素操作分離的模式,這使得測試代碼變得更加清晰。
2、頁面對象與用例分離,使得我們更好的複用對象。
3、可複用的頁面方法代碼會變得更加優化
4、更加有效的命名方式使得我們更加清晰的知道方法所操作的UI元素
在這裏插入圖片描述
爲了讓大家印象更加深刻,我會實戰演示給大家看,明白Page Object的強大之處
21、瀏覽器的複用**(待更新)**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章