1. 程式人生 > >python selenium自動化(一)點選頁面連結測試

python selenium自動化(一)點選頁面連結測試

需求:現在有一個網站的頁面,我希望用python自動化的測試點選這個頁面上所有的在本視窗跳轉,並且是本站內的連結,前往到連結頁面之後在通過後退返回到原始頁面。

要完成這個需求就必須實現3點:

1. 找到原始頁面上面所有的在本視窗內跳轉的連結

2. 跳轉到目標頁面之後,“後退”到原始頁面

3. 在原始頁面上繼續點選後續的連結

首先,要找到頁面上的所有連結並不困難。selenium為我們提供了find_elements_by_tag_name方法。我們只需要在初始化webdriver之後,呼叫

driver.find_elements_by_tag_name("a") 

就能找到頁面上的所有a標籤。

我們可以對所有的a標籤進行點選,但是這樣的話我們不能保證所有的a標籤所指向的目標頁面都是站內的,有可能目標是其他的站外網頁;另外這樣也不能保證該跳轉頁面是在本視窗跳轉而不是新開一個視窗。

解決辦法:

使用selenium.webdriver.remote.webelement.WebElement提供的get_attribute方法。

通過get_attribute拿到該a標籤的各種屬性,通過判斷找到符合要求的元素進行點選。

get_attribute("href") 得到a標籤對應的目標頁面的URL,對URL進行判斷就可以瞭解到該頁面是否站內頁面。我們可以知道,如果是站內頁面的話這個屬性一般會是一個相對路徑,或者包含了本站域名,但如果是站外頁面的話,那它一定是包含了“http”的一個url。

get_attribute("target")如果target不是"_blank"的話,可以判斷該頁面是在本視窗跳轉的。

跳轉到下一頁面後如何返回原始頁面呢?

selenium webdriver 提供了back方法可以輕鬆的達到這個目標:driver.back()

最後,需要在返回了原始頁面之後繼續點選下一個連結進行測試,這個不用說肯定要使用for loop:

for i in range(0, len(driver.find_elements_by_tag_name("a"))):

在python中,如果我們指定i在range(0, x)中迴圈時,會以1為步長來遍歷從0到(x-1)的序列。例如:range(0,5)會得到[0, 1, 2, 3, 4]。當我們想更改range的步長時,則需要為range方法提供第三個引數。例如:range(0,5,2),則會以2為步長,得到[0,2,4]這個序列。

另外,我們也可以使用類似C#中foreach的方法:

for targetLink in driver.find_elements_by_tag_name("a"):

這種方法同樣可以遍歷所有的a標籤集合中的所有元素。

如果使用第二種方法,我們覺得這個需求可以簡單的實現為:

links = driver.find_elements_by_tag_name("a")
for link in links:
     if not "_blank" in link.get_attribute("target") and ("google" in link.et_attribute("href") or not "http" in link.get_attribute("href")):
          link.click()
          driver.back()

但是這樣的實現在執行時會丟擲異常:

selenium.common.exceptions.StaleElementReferenceException: Message: u'Element not found in the cache - perhaps the page has changed since it was looked up'

異常的說明已經很明顯了:在cache中找不到元素,在元素被找到之後頁面變換了。 這就說明,噹噹前頁面發生跳轉之後,存在cache中的關於這個頁面的元素也被清空了。

因此,我們需要在每次回到原始頁面之後對我們感興趣的a標籤元素重新搜尋,同時我們又必須接著上次的點選到的元素繼續點選。因此我們使用第一種遍歷的方法來實現這個for loop:

length = len(driver.find_elements_by_tag_name("a")

for i in range(0,length):
    links = driver.find_elements_by_tag_name("a")
    link = links[i]
    if not ("_blank" in link.get_attribute("target") or "http" in link.get_attribute("href")):
        link.click()
        driver.back()

這樣,在每次返回頁面之後會重新搜尋一遍頁面上的a元素,然後使用cache中的i繼續點選下一個跳轉連結。

相關推薦

python selenium自動化頁面連結測試

需求:現在有一個網站的頁面,我希望用python自動化的測試點選這個頁面上所有的在本視窗跳轉,並且是本站內的連結,前往到連結頁面之後在通過後退返回到原始頁面。 要完成這個需求就必須實現3點: 1. 找到原始頁面上面所有的在本視窗內跳轉的連結 2. 跳轉到目標頁面之後,“後退”到原始頁面 3. 在原

python+selenium 自動化搭建環境

上一篇文章中介紹了pycharm,本章介紹selenium下載和環境得搭建 下載tar.gz的包 下載後解壓檔案: 2、安裝selenium (1)在cmd輸入 python -m pip install selenium 驗證成功得方法: 在

python selenium系列:框架介紹及安裝

row pre ive AS baidu mar 在操作 pan 但是 一 selenium是什麽?引用百度百科的介紹selenium的一段話:“Selenium 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的

小程式磚塊事件的繫結

先是小程式文件中關於事件的描述:什麼是事件事件是檢視層到邏輯層的通訊方式。事件可以將使用者的行為反饋到邏輯層進行處理。事件可以繫結在元件上,當達到觸發事件,就會執行邏輯層中對應的事件處理函式。事件物件可以攜帶額外資訊,如 id, dataset, touches。事件的使用方

python+selenium自動化開啟火狐/chrome/IE瀏覽器

如何初始化一個webdriver例項物件driver,然後開啟和關閉firefox/chrome瀏覽器,首先先去下載瀏覽器的外掛【driver外掛geckodriver.exe】,下載地址:https://github.com/mozilla/geckodriver/rele

Python學習筆記——瀏覽器自動化測試工具Selenium

看了網友用Python通過影評來分析電影是好片還是爛片,自己也有了個想法想去分析下百度貼吧的帖子是精品帖子還是水帖子。目前正在熟悉工具的使用。 會用到的庫:Selenium, pandas(資料模型),jieba(分詞器),snownlp(情感分析),worldcloud(

Selenium Python 學習教程

安裝python 開啟 Python官網,找到“Download”, 在其下拉選單中選擇自己的平臺(Windows/Mac),一般的Linux平臺已經自帶的Python,所以不需要安裝,通過開啟“終端” ,輸入“python”命令來驗證。 如果你是第一次接觸Python,一定會迷惑Pyt

Selenium with Python中文翻譯

目錄 1.安裝 1.1介紹 Selenium的python繫結提供了一個簡單的API通過Selenium WebDriver來寫具有功能性的測試。通過呼叫Selenium Python API 以一種直接的方式來獲取所有Selenium WebDriv

Python-接口自動化

定義 大小 使用 增加 [ ] orm 如果 行數 htm python基礎知識(一) 一、python語言特點 1、易於學習:python有相對較少的關鍵字,結構簡單,有一個明確定義的語法,學起來比較簡單; 2、易於閱讀:python代碼定義的更清晰;

Appium+python自動化- 環境搭建—上超詳解

 簡介   今天是高考各地由於降水,特別糟糕,各位考生高考加油,全國人民端午節快樂。最近整理了一下自動化的東西,先前整理的python介面自動化已經接近尾聲。即將要開啟新的征程和篇章(Appium&python)。那麼首相的問題就是搭建環境了。好久沒搭建環境又踩了不少坑,appium的環境

Python 學習筆記

pytho oat 變量 情況 class 弱類型 定義 寫代碼 基本上 為什麽學習Python?因為Python 的用處太多了。 本想學會一們語言就好好的維持下去,但是最近Python太火啦,什麽人工智能、網絡爬蟲的,耳濡目染的,心想多學習一些東西總是好的,於是就抽空學習

Python/ MySQL練習題

姓名 insert avg when 並且 記錄 有效 完全 cas Python/ MySQL練習題(一) 2、查詢“生物”課程比“物理”課程成績高的所有學生的學號 1 SELECT 2 * 3 FROM 4 ( 5 SELEC

python學習筆記

學習筆記 關鍵參數 引號 出現 大寫字母 整除 mil 不能 函數名 以前學習過c/c++,在初次接觸python後有恨多類似的概念,最近開始接觸python,正在閱讀python簡明教程,遇到的python自己的語法特性。 python中的縮進代表python中的一個塊,

Python基礎學習

func exe function 學習 typeerror exit invalid min eas #Default Argument Values & in keyworddef ask_ok(prompt, retres=4, reminder=‘pleas

python基礎筆記

val 變量 下劃線 .py 字母 pass 變量名 del 交互 python解釋器執行python程序的過程:python3 C:\test.py 1.啟動python解釋器(內存中) 2.將C:\test.py 內容從硬盤讀入內存(這一步與文本編輯器是一樣的) 3.執

python自動華

break 必備 微軟.net 管理 流程控制 類型 推薦 .py 加載 Python自動化 【第一篇】:Python簡介和入門 Python簡介: 一、什麽是python   Python是一門動態解釋性的強類型定義語言。   pythonde 特點:“優雅”、“明確”

python基礎整理

sci 可變 python break job continue ont mat con 1、字符編碼: ASCIl碼 255個 每個字符一個字節, Unicode 每個字符兩個字節, UTF8 可變長的Unicode編碼,英文一個字節,中文三個字節。 2、格式化字

python基礎教程

底層 技術分享 包括 什麽事 inpu 內容 很多 運算 下劃線   之所以選擇py交易有以下幾點:1、python是膠水語言(跨平臺),2、python無所不能(除了底層),3、python編寫方便(notepad++等文本編輯器就能搞事情),4、滲透方面很多腳本都是py

python學習筆記

余數 必須 return 行緩沖 pyc 構造 逆序 返回 reverse 1、在交互式解釋器中,給變量賦值(字符串,數值等等)並通過輸入變量名顯示它們的值。再用 print 語句做同樣的事。區別在於:變量賦值是數值時沒有區別;當變量賦值是字符串時,通過變量名顯示它們的值的

編寫python web框架:簡介

== web 方法 nvi ever pytho 必須 ext sim 編寫一個最簡單的應用: def app(environ, start_response): start_response(‘200 OK‘, [(‘Content-Type‘, ‘tex