1. 程式人生 > >使用WebElements定位多個相似的元素,比如頁面中存在五個單選按鈕,他們有相同的class屬性,值為:myRadio,我們想對五個按鈕迴圈操作,我們可以把它們全部取出來放到集合中,然後做迴圈操作

使用WebElements定位多個相似的元素,比如頁面中存在五個單選按鈕,他們有相同的class屬性,值為:myRadio,我們想對五個按鈕迴圈操作,我們可以把它們全部取出來放到集合中,然後做迴圈操作

webdriver提供了豐富的API,有多種定位策略:id,name,css選擇器,xpath等,其中css選擇器定位元素效率相比xpath要高些,使用id,name屬性定位元素是最可靠,效率最高的一種辦法。   1、工具選擇:在我們開發測試指令碼的過程中各個瀏覽器給我們也提供了方便定位元素的工具,我比較喜歡使用firefox的firebug工具,也是目前很多開發測試人員比較熱衷的選擇,原因是firefox是唯一能夠整合selenium IDE的瀏覽器,並且firebug給使用者提供了豐富的擴充套件元件,我們可以根據自己的需要來選擇,一般情況下,使用firebug+firefinder就足夠使用了,firefinder支援xpath以及css選擇器定位元素的功能,很方便幫助我們除錯測試指令碼   2、元素定位的方法:findElement() 與 findElements()   findElement() 該方法返回基於指定查詢條件的webElement物件,或丟擲不符合條件的異常  eg:driver.findElement(By.id("userID"));   findElements() 該方法返回指定查詢條件的WebElement的物件集合,或返回null   3、WebElement物件提供的各種定位元素策略
ID:driver.findElement(By.id(<elementID>)) Name:driver.findElement(By.name(<elementName>)) className:driver.findElement(By.className(<elementClassName>)) tagName:driver.findElement(By.tagName(<htmlTagName>)) linkText:driver.findElement(By.linkText(<linkText>)) partialLinkText:driver.findElement(By.partialLinkText(<partialLinkText>)) css:driver.findElement(By.cssSelector(<cssSelector>)) xpath:driver.findElement(By.xpath(<xpathQuery>))
  4、webelement類提供了諸多方法,在我們開發指令碼過程中如何選擇最可靠,效率最高的方法,使用id,name是首選,因為他們在html標籤中是唯一的,所以是最可靠的   ID定位:driver.findElement(By.id("username"))   name定位:driver.findElement(By.name("username"))   class定位:driver.findElement(By.className("username"))   多學一招:WebElement類支援查詢子類元素,如果頁面中存在重複元素,但在不同div中,我們可以先定位到其父元素,然後定位其子元素,方法如下:   WebElement hello = driver.findElement(By.id("div1")).findElement(By.lindText("hello"));   5、使用WebElements定位多個相似的元素,
比如頁面中存在五個單選按鈕,他們有相同的class屬性,值為:myRadio,我們想對五個按鈕迴圈操作,我們可以把它們全部取出來放到集合中,然後做迴圈操作,如下:
List<WebElement> radios = driver.findElements(By.className("myRadio")); for(int i = 0;i<radios.size();i++){ radios.get(i).click(); }
  其他定位方法與操作id,name類似,這裡不再贅述,接下來我著重對css選擇器與Xpath描述下   一、WebDriver 的By類中提供了cssSelector()方法,該方法使用有以下幾種形式:   1、使用相對路徑定位元素   如,我們要定為DOM中的input元素,我們可以這樣操作,不考慮其在DOM中的位置,但這樣做存在一定弊端,當DOM中存在多個input元素時,該方法總返回DOM中的第一個元素,這並不是我們所期待的   eg:WebElement username = driver.findElement(By.cssSelector("input"));   另外,為了使用這種方法更準確的定位元素,我們可以結合該元素的其他屬性來實現精確定位的目的   a、結合id來定位,driver.findElement(By.cssSelector("input#username")); 在標籤與id之間使用#連線,如果對css瞭解的朋友一看就知道為什麼會這樣寫了,不瞭解也沒關係,只要記住這種寫法就OK了   另外該方法也可簡寫為driver.findElement(By.cssSelector("#username")); 有點兒類似於id選擇器

b、使用元素的任何屬性來定位元素   driver.findElement(By.cssSelector("標籤名[屬性名='屬性值']"));   c、匹配部分屬性值
^=        driver.findElement(By.cssSelector("標籤名[屬性名^='xxx']"));  匹配屬性值以xxx開頭的元素 $=        driver.findElement(By.cssSelector("標籤名[屬性名$='xxx']"));  匹配屬性值以xxx結尾的元素 *=         driver.findElement(By.cssSelector("標籤名[屬性名^='xxx']"));  匹配屬性值包含xxx的元素
  2、使用相對+絕對路徑方法,這裡是我自己定義的方法,方便記憶,的確也是這樣來實現的   driver.findElement(By.cssSelector("div#login>input"))   該方法中“div#login>input” 首先通過相對路徑定位到id為login的div元素,然後查詢其子元素input(絕對路徑)   二、使用xpath定位元素,相比cssSelector,xpath是我比較常用的一種定位元素的方式,因為它很方便,缺點是,消耗系統性能   1、使用絕對路徑定位元素   driver.findElement(By.xpath("/html/body/div/form/input"))   2、使用相對路徑定位元素   driver.findElement(By.xpath("//input"))   返回查詢到的第一個符合條件的元素   3、使用索引定位元素,索引的初始值為1,注意與陣列等區分開   driver.findElement(By.xpath("//input[2]"))   返回查詢到的第二個符合條件的元素   4、結合屬性值來定位元素   driver.findElement(By.xpath("//input[@id='username']"));   driver.findElement(By.xpath("//img[@alt='flowr']"));   5、使用邏輯運算子,結合屬性值定位元素,and與or   driver.findElement(By.xpath("//input[@id='username' and @name='userID']"));   6、使用屬性名來定位元素   driver.findElement(By.xpath("//input[@button]"))   7、類似於cssSlector,使用部分屬性值匹配元素
starts-with()    driver.findElement(By.xpath("//input[stars-with(@id,'user')]")) ends-with        driver.findElement(By.xpath("//input[ends-with(@id,'name')]")) contains()        driver.findElement(By.xpath("//input[contains(@id,"ernam")]"))
  8、使用任意屬性值匹配元素   driver.findElement(By.xpath("//input[@*='username']"))   9、使用xpath軸來定位元素   這裡略了,詳見w3school.com   三、使用innerText定位元素   1、使用cssSelector查詢innerText定位元素   driver.findElement(By.cssSelector("span[textContent='新聞']"));   2、使用xpath的text函式   driver.findElement(By.xpath("//span[contains(text(),'hello')]"))   包含匹配   driver.findElement(By.xpath("//span[text()='新聞']"))     絕對匹配

相關推薦

使用WebElements定位相似元素比如頁面存在按鈕,他們相同class屬性myRadio我們按鈕迴圈操作我們可以它們全部取出放到集合然後迴圈操作

webdriver提供了豐富的API,有多種定位策略:id,name,css選擇器,xpath等,其中css選擇器定位元素效率相比xpath要高些,使用id,name屬性定位元素是最可靠,效率最高的一種辦法。   1、工具選擇:在我們開發測試指令碼的過程中各個瀏覽器給

對比2表mailbox_id字段的差集然後插入操作

兩個表的差集對比2個表mailbox_id字段的差集,並導出。然後利用循環insert插入。kkmlmysqlpass=$(cat /usr/local/kk-ml/config/custom.conf | grep -w "pass" | awk -F" " '

List集合練習題 完成getAllDog 方法從一個Animal集合挑選出所有的Dog物件這些物件 放在一個Dog 集合返回。

package cn.sc.test; import java.util.ArrayList; import java.util.List; public class TestAnimal { public static void main(String[] args) { List

[譯] 在JS如何讓(a===1 && a===2 && a === 3)(嚴格相等)的true?

原文: Will (a===1 && a===2 && a===3) (strict comparison) ever be true (in JavaScript) 本文是JS經典問題(a == 1 && a==2 && a==3)(寬

《JAVA繼承與型》【Person、Student、Employee類】(注此題在書上原題基礎上修改)設計一個名Person的類和它的兩Student和Employee子類。

題目:【Person、Student、Employee類】(注:此題在書上原題基礎上有修改)設計一個名為Person的類和它的兩個名為Student和Employee子類。 每個人都有姓名和電話號碼。學生有年級狀態(大一、大二、大三或大四)。將這些狀態定義為常

EF操作相同ID的實體報錯附加型別“...”的實體失敗

        附加型別“...”的實體失敗,因為相同型別的其他實體已具有相同的主鍵值。在使用 "Attach" 方法或者將實體的狀態設定為 "Unchanged" 或 "Modified" 時如果圖形中的任何實體具有衝突鍵值,則可能會發生上述行為。這可能是因為某些實體是新

程式設計師吐槽領導前同事挖月薪4萬還不如我們一萬的!

對於職場中打拼的人員來說,有人員的變動是再正常不過的事情了,特別是一些大的公司,由於人數眾多,每個人的情況也會不同,所以就會看到今天來明天離職的現象,不過對於公司中的員工們來說,感到最難以接受的事情就是覺得同事業務水平不如自己的,但是薪資待遇卻高出自己一大截,其實也並不只是公司員工,這樣的事情放到每

selenium-webdriver定位元素

nbsp 根據 index 密碼 sys list aix ive word /*<div id="divId"> <input id="userid" type="text" value="liuhaixia" title="用戶名"

mahout demo——本質上是基於Hadoop的分步式算法實現比如節點的數據合並數據排序網路通信的效率節點宕機重算數據分步式

fin urn [] return uid content 3.0 stock blank 摘自:http://blog.fens.me/mahout-recommendation-api/ 測試程序:RecommenderTest.java 測試數據集:item.csv

JDBC操作數據庫比如修改電商數據庫的分類的id讓各商品隨機

url spa creates 需要 stat 句柄 獲取 amp statement 1 package CRM; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 impo

for迴圈查詢資料庫結果放在集合裡面但是集合的長度卻始終1?

for (int i = 0; i < tell.length; i++) { String sql=""; if(tell[i]=="地址為45號"||tell[i]=="地址為23號"||tell[i]=="地址為31號"||tell[i]=="地址為50號

計算需要迴圈幾次比如分頁或者資料庫遍歷時迴圈次數

一般想到的計算是,通過求餘 求模,沒有整除,迴圈次數就要 +1 int p = totalCount / pageSize; if (totalCount % pageSize != 0) p++; return

編寫一個檔案分割工具一個大檔案分割成小的檔案。並且能再次它們合併起來得到完整的檔案。

package wenjianyuliu;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io

學習element覺得得封裝一下一些函式比如form驗證

學習vue中,用element作為ui框架,發現很多函式都是非同步,或者是巢狀型別,為了使程式碼更簡潔些,我以form表單的validate作例子 原先函式是這樣 this.$refs[formName].validate((valid) => { //這裡面寫

js毫秒數轉為天小時分鐘秒比如10130毫秒轉換xx天xx小時xx分鐘

傳入的時間戳為:83424000; 列印結果:  --------- 轉換時間: 0天 23時 10分 24秒 函式返回結果: 23:10:24 實現程式碼: var my_time = '

型問題)從一個Animal陣列挑選出所有的Dog物件這些物件放在一個Dog陣列返回

package com.day11_1; import java.util.*; public class Test9 { public static void main(String[] args) { Animal[] as = {

HDU-1698(線段樹set區間全部更改懶人標記)

#include<iostream> #include<algorithm> using namespace std; const int maxn = 1e5 + 5; long long dat[maxn << 2], s

OpenCV練習嘗試同時提取不同的顏色物體比如同時提取紅綠三不同顏色的物體。

python: 1.先是通過 import cv2 import numpy as np red = np.uint8([[[255,0,0]]]) hsv_red=cv2.cvtColor(red,cv2.COLOR_BGR2HSV) print hsv_red green=np.ui

用兩實現一個佇列完成佇列的Push和Pop操作。 佇列元素int型別。

class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(