1. 程式人生 > >EXT框架Web應用Selenium自動化之XPath

EXT框架Web應用Selenium自動化之XPath

在之前用到的Selenium Xpath中,部分頁面元素id是固定的,定位相對方便;再有,動態元素的xpath定位也不太複雜。對於EXT作為框架開發的Web應用,頁面元素的id等屬性是動態的,例如使用者每次登陸頁面所生成頁面元素的id會發生變化。這樣一來就增加了定位元素的難度,並且在對測試用例進行抽象化時與之前的實踐也有些不同,在稍後的文章會進行記錄。

  在此,我先對xpath部分進行一些總結。首先是Xpath教程http://www.w3school.com.cn/xpath/,全面的介紹了xpath語法中的重要資訊。下面用一些例項來說明,在此也要感謝ZhangFei同學及Seleniumcn中文論壇在我學習過程中的幫助。此外Firefox瀏覽器中的Xpath Checker及firebug外掛對定位XPath都是很有幫助的,大家可以參考使用。

  先對XPath做個簡短介紹,之後用例項具體說明:

1.EXTJS的頁面原始碼是多個div組成的,對於div id為常量時,可用div先定位,再由其他標籤定位,例如input field可用label name,button可用button上的文字來定位。

2.在定位更接近目標的節點時可用“//”和“/”分割路徑,“//”表示相對路徑,即可直接定位到元素,不管它的位置在哪;“/”表示絕對路徑,即當前目錄下的直接子元素。

3.定位當前元素之上或之下的元素節點,可用軸進行定位,即以當前節點為軸的父、子節點,例如following-sibling,preceding,preceding-sibling等。

4.在遇有多個相匹配的元素時,可用元素index或position()函式進行定位。

  以如下這個Login頁面為例,.

1.先說選擇語言欄的dropdown list,我們的操作方式是click,可以點選到選擇框或者向下箭頭部分。如圖,我們先用比較繁瑣的xpath找到了input field。

定位input field也可以有更簡單的xpath,例如xpath=//input[@class=' x-form-text x-form-field x-trigger-noedit '],不過此種方式僅限於頁面只有一個這樣的dropdown list,如果有多個,就需要通過其他的資訊進行更精確的定位了,比如dropdown list前面的名稱,元素的序列號等等。例如:

或者我們也可以用dropdown list的箭頭圖片“”,例如xpath=//label[text()='工作狀態:']//following::img[@class='x-form-trigger x-form-arrow-trigger '][1],同樣的,如果頁面上有多個dropdownlist,我們需要通過其他資訊定位想要操作的那個元素。

2.對於button,可以直接用button上面的文字進行定位,例如:

3.對於展開頁面樹結構的xpath,例如:,操作方式是click,可通過雙擊文字部分或單擊“+”,“-”號圖示進行操作。

先來說雙擊文字的xpath,比較簡單,定位到要操作的文字就可以了。

或者,我們可以通過“+”,“-”號的img來定位,不過這裡有兩個問題。一個是在img較多時,需要其他更精確資訊;另一個是,展開/收縮樹結構時會改變img節點的class屬性,在定義展開/收縮方法時需要不同的xpath,詳情請見圖。

節點收起、展開時的img中的class不同

4. Checkbox的xpath定位。與dropdownlist類似,checkbox的標籤也是input,這裡我用的是type屬性進行定位。同樣的也會用到有多個checkbox的情況,所以需要更多的具體資訊,如checkbox後面的文字,checkbox的序列位置。請見圖。

5.這裡也說一下自己在實驗的時候對following、following-sibling和preceding、preceding-sibling這兩對軸的一些認識,在教程中對preceding-sibling的解釋是“選取當前節點之前的所有同級節點”,相應的following-sibling即為“選擇當前節點之後的所有同級節點”。也就是說加上了“-sibling”關鍵字後,就是搜尋與當前節點同級的之上/之下的節點;那麼沒有加上“sibling”關鍵字的,搜尋的就是之上/之下的所有節點,忽略同級概念。以本文第一點中的第一張圖為例。

  在xpath的第二步定位到label節點,following是說搜尋label節點之後的所有input節點,從頁面原始碼中可以看出,label與input並無同級關係,甚至input標籤應該是label同級節點div的子節點.那麼如果用following-sibling又是什麼效果呢?那樣先搜尋到的應該是label的同級節點div,進而才能繼續一層一層的找下來到input節點(如圖).顯然,兩種方式在當前節點的下一節點上是不同的.Preceding也是同樣的道理哈。

6.對於系統中彈出視窗中元素xpath的定位。系統中的彈出框,分為EXTJS的和windows的。對於EXTJS的與之前的介紹沒有什麼區別,還是按照div的層結構逐層查詢。EXT的框架在頁面原始碼上有些不同,像一些EXTJS的系統提示框、右鍵的功能選單在未啟用時原始碼顯示為disable的狀態,只有在啟用的時候才會顯示(見圖例);對於新的windows視窗目前可能無法定位,需要藉助其他工具了。

   這次寫這麼多,基本上是我在學習xpath中遇到的問題,回過頭來看看大部分都是很相似的,找到規律寫起來就比較快了。再有,Xpath Checker和firebug的用處很大,在checker上動手試著找會很快上手的。下一步,看看能不能把這些抽象一下再總結一下。如果有寫的不多的請大家幫忙指點哈,謝謝!

相關推薦

EXT框架Web應用Selenium自動化XPath

在之前用到的Selenium Xpath中,部分頁面元素id是固定的,定位相對方便;再有,動態元素的xpath定位也不太複雜。對於EXT作為框架開發的Web應用,頁面元素的id等屬性是動態的,例如使用者每次登陸頁面所生成頁面元素的id會發生變化。這樣一來就增加了定位元素的難

python+selenium基礎XPATH定位

方式 沒有 基礎 元素 w3c com pytho round con 世界上最遠的距離大概就是明明看到一個頁面元素矗在那裏,但是我卻定位不到!! selenium定位元素的方法有很多種,像是通過id、name、class_name、tag_name、link_text

selenium自動化處理瀏覽器警告彈窗

  有的網站會彈出類似如下圖的警告彈窗,你會發現這種彈窗在html原始碼中怎麼也定位不到,接下來將介紹這種彈窗的處理方式。     其實這種彈窗是不屬於html的元素的,他是屬於瀏覽器自帶的彈窗,所以用定位元素的方法是定位不了的。   瀏覽器的警告彈窗一共有三種:

jsp----前後端分離---框架---web應用的構建

java勸退教程-作業系統篇(三) 本篇文章,我們來講講技術,系統演進的過程對我們java開發帶來的影響。本文可能會涉及到一些技術名詞,不懂沒有關係,先混個眼熟,我們後面會一個個詳細介紹。下面會列舉三個不同時期的技術,因為同時期也會有各種各樣的技術,所以我們只介

Web應用架構入門11個基本要素

譯者: 讀完這篇部落格,你就可以回答一個經典的面試題:當你訪問Google時,到底發生了什麼? 原文:Web Architecture 101 譯者:Fundebug 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用於學習。 當我

python+selenium 自動化啟動瀏覽器載入瀏覽器的外掛

1、之前已經總結了在瀏覽器啟動的時候,載入外掛的一種方法(建立一個profile),這裡有一種方法,可以載入到系統瀏覽器的所有外掛,方便在指令碼執行中運用firebug,firepath燈進行指令碼除錯。 原理:載入瀏覽器的配置,需要用firefoxprofile(prof

selenium自動化radio,select,checkbox

當我們瀏覽網頁時,經常會看到radio和select,那麼我們如何獲取他的狀態呢? 以百度搜索設定為例 檢視radio的屬性 <input type="radio" checked name="s1" id="s1_1"> <input type="ra

如何配置ASP.NET Web應用程式使使用Azure SQL Database

1. 首先你需要新增一個程式包到你的ASP.NET專案中。右鍵點選你的ASP專案,選擇Add Library Package Reference: 注意:這裡的MigrateASPWebsiteAzure只是一個例子,請在Visual Studio中選擇你將要配置的ASP

selenium自動化簡單報告生成

我們測試結果需要用到報告輸出,那麼我們如何定義一個簡單的報告呢? 這裡我們藉助HTMLTestRunner,下載地址  點選開啟連結 關於這個模組python 2和python 3有點區別,目前網上下載的點選開啟連結只有2,這裡我們如果用到的是python3則需要將下載的2

Python3 Selenium自動化web測試 ==> 第八節 WebDriver高級應用 -- 結束Windows中瀏覽器的進程

ID get unit ask TE 執行 self lec ace 學習目的:   掌握WebDriver的高級應用 正式步驟: # -*- coding:utf-8 -*- from selenium import webdriv

selenium自動化測試框架PO設計模式

中一 webdriver ges ini python 廣告 數量 分析 pytho 面向對象的特性:封裝、繼承、多態。在自動化中一樣適用,Selenium自動化測試中有一個名字常常被提及PageObject(思想與面向對象的特性相同),通過PO模式可以大大提高測試用例的維

python 和 selenium實現web UI功能自動化測試框架(米兔888)

之前分享了python和requests搭配實現的介面自動化測試框架,今天,我再來整理分析下基於python和selenium的web UI自動化測試,希望能對大家有所幫助,也是自己整理知識學習的方法,跟大家一起努力,奮鬥在自動化測試的道路上。其實UI自動化和介面自動化框架的

整合C#測試框架Selenium對於Web系統實現自動化測試

系統環境: 軟體需求: Visual C# 2010,Mozilla Firefox,Selenium 硬體需求: Pentium III 450以上的CPU處理器,64MB以上的記憶體,200MB的自由硬碟空間 內容簡介: 1. 利用Spy++進行W

Selenium基於Python的web自動化測試框架(3)-搭建selenium環境

搭建環境 建立selenium虛擬環境 mkvirtualenv selenium-py3 selenium-py3是虛擬環境的名字 由於筆者本地只有python3版本,所以不需要指定python

Selenium自動化測試Xpath網頁元素定位

XPath 是一門在 XML 文件中查詢資訊的語言。XPath 可用來在 XML 文件中對元素和屬性進行遍歷。XPath雖然是被設計用來搜尋XML文件的,不過它也能很好的在HTML文件中工作,並且大部分瀏覽器也支援通過XPath來查詢節點。 xpath的作用就

基於 Selenium WebDriver 的 Web 應用自動化測試(JS版)

https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/index.html 為什麼要使用Javascript語言進行自動化測試 相比Java或者Python學習門檻較低,環境安裝簡單,容易上手。 建立測試專案 初始化

《一頭扎進》系列Python+Selenium自動化測試框架實戰篇6 - 價值好幾K的框架,呦!這個框架還真牛叉哦!!!

1. 簡介   本文開始介紹如何通過unittest來管理和執行測試用例,這一篇主要是介紹unittest下addTest()方法來載入測試用例到測試套件中去、用addTest()方法來載入我們測試用例到suite中去和利用discover()方法去載入一個路徑下所有的測試用例。 2. addTes

《一頭扎進》系列Python+Selenium自動化測試框架實戰篇7 - 年底了還沒升職加薪,年終獎全靠它了!!!

1. 簡介   截止到上一篇文章為止,框架基本完全搭建完成。那麼今天我們要做什麼呢????聰明如你的小夥伴或者是童鞋一定已經猜到了,都測試完了,當然是要生成一份高階大氣上檔次的測試報告了。沒錯的,今天巨集哥就帶領你們將這部分內容也整合到這個框架中。本文來介紹如何生成自動化測試報告,前面文章尾部提到了利用HTM

Python3-Selenium自動化測試框架(二)selenium使用和元素定位

Selenium自動化測試框架(二)之selenium使用和元素定位 (一)selenium的簡單使用 1、導包 from selenium import webdriver 2、初始化瀏覽器 # 驅動在python環境中 browser = webdriver.Chrome() # 驅動不放在python環

Selenium系列(十三) - 自動化必備知識Xpath的詳細使用

如果你還想從頭學起Selenium,可以看看這個系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html   其次,如果你不懂前端基礎知識,需要自己去補充哦,博主暫時沒有總結(雖然我也會,所以我學selenium就不用複習前端了哈哈哈.