日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Selenium 定位总结

發(fā)布時間:2024/5/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Selenium 定位总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文由周小麗發(fā)表于TesterHome社區(qū),點擊原文鏈接與原文作者交流

xpath 有兩種表示方法,絕對路徑和相對路徑,絕對路徑是指從根開始,以/開始,如/html/body/div,相對路徑是指在一個路徑下,另外的路徑以這個路徑作為參照,以//開始。測試時,一般使用相對路徑查找元素 (安裝 ChroPath 插件,可以查找 xpath 路徑)。
xpath 用法來源于:https://www.cnblogs.com/purelavender/p/14512530.html

怎么提高 selenium 腳本的自動化執(zhí)行效率?

1、優(yōu)化測試用例,盡可不使用 sleep,減少使用 ImplicitlyWait,而使用 selenium 的 wait/FluentWait,這樣可以優(yōu)化等待時間
2、使用 selenium grid,通過 testng 實現(xiàn)并發(fā)執(zhí)行
3、 針對一些不穩(wěn)定的動態(tài)控件通過 JS 實現(xiàn)操作
4、重載 testng 的 listener 實現(xiàn) retry 機(jī)制,提高測試用例成功率

xpath 基本用法:

1、屬性定位 表示方法://標(biāo)簽名 [@ 屬性名=屬性值] ,通過單一的屬性即可查找到元素。如:查找輸入文本框,//input[@id=‘kw’]
  

2、and 組合屬性定位 表示方法://標(biāo)簽名 [@ 屬性名 1=屬性值 and 屬性名 2=屬性值],當(dāng)單一屬性無法定位唯一元素時,可以組合多個屬性進(jìn)行查找。如:查找輸入文本框,//input[@name=‘wd’ and @class=s_ipt]
  

3、通過父元素找子元素 表示方法: //父元素/子元素,當(dāng)查找的元素沒有特征屬性時,其父元素有特征屬性時,可以通過其父元素往下查找。如:查找輸入文本框,//span[@id=‘s_kw_wrap’]/input
  

4、通過祖先元素找子孫元素 表示方法://祖先元素//子孫元素,當(dāng)查找的元素沒有特征屬性時,其祖先元素有特征屬性時,可以通過其祖先元素往下查找。如:查找輸入文本框,//span[@id=‘s_kw_wrap’]//input
  

5、通過子元素找父元素 表示方法://子元素/…,當(dāng)查找的元素沒有特征屬性,其子元素有特征屬性時,可以通過其子元素往上查找。如:查找輸入文本框的父元素,//input[@id=‘kw’]/…
  

6、通過文本定位,表示方法://標(biāo)簽名 [text()=文本內(nèi)容](text 前不需要加 @ 符號),經(jīng)常和 contains() 組合使用。如,定位【新聞】對應(yīng)的 a 標(biāo)簽,//a[text()=‘新聞’]
  

7、通過 contains 模糊匹配定位,表示方法://標(biāo)簽名 [contains(屬性或文本, 內(nèi)容)]。如,定位頁面中的【設(shè)置】元素,//span[contains(@name, ‘tj’)]
  

8、通過索引 [] 定位 (注意:1、加括號;2、索引從 1 開始),如,定位【學(xué)術(shù)】對應(yīng)的 a 標(biāo)簽,(//a[@class=‘mnav c-font-normal c-color-t’])[7]
  

9、常用的軸運(yùn)算,表示方法:軸關(guān)系::標(biāo)簽名稱
  ancestor:當(dāng)前元素的所有祖先元素(父、祖父等),如:通過【設(shè)置】查找其父級 div 元素,//span[@id=‘s-usersetting-top’]//ancestor::div[@id=‘u1’]
  

following-sibling:當(dāng)前元素之后的所有同級元素,如:查找【直播】之后的同級元素,//a[contains(text(), ‘直播’)]//following-sibling::a
  

preceding-sibling:當(dāng)前元素之前的所有同級元素,如:查找【直播】之前的同級元素,//a[contains(text(), ‘直播’)]//preceding-sibling::a
  

selenium 之 CSS 定位匯總

定位輸入框
一:單一屬性定位
1:type selector
driver.find_element_by_css_selector(‘input’)

2:id 定位
driver.find_element_by_css_selector(’#kw’)

3:class 定位
driver.find_element_by_css_selector(’.s_ipt’)

4:其他屬性定位
driver.find_element_by_css_selector(’[name=‘wd’]’)
driver.find_element_by_css_selector("[type=‘text’]")

二:組合屬性定位

1:id 組合屬性定位
driver.find_element_by_css_selector(“input#kw”)

2:class 組合屬性定位
driver.find_element_by_css_selector(“input.s_ipt”)

3:其他屬性組合定位
driver.find_element_by_css_selector(“input[name=‘wd’]”)

4:僅有屬性名,沒有值也可以
driver.find_element_by_css_selector(“input[name]”)

5:兩個其他屬性組合定位
driver.find_element_by_css_selector("[name=‘wd’][autocomplete=‘off’]")

三種等待的用法

ImplicitlyWait(隱式等待)

driver.implicitly_wait(10) # 設(shè)置隱式等待時間為 10s
是指對整個頁面的加載,隱式等待在 driver 的整個生命周期內(nèi)都有效。
也就是說,driver 在沒有被 close() 之前,定位每個元素時,都會有隱式等待的 10s,也就是說,只需要設(shè)置一次,所有的元素都可有最多 10s 的等待加載的時間
可是隱式等待依然存在一個問題,那就是程序會一直等待整個頁面加載完成,也就是通常狀況下你看到瀏覽器標(biāo)簽欄那個小圈再也不轉(zhuǎn),才會執(zhí)行下一步,但有時候頁面想要的元素早就在加載完成了,可是由于個別 js 之類的東西特別慢,我仍得等到頁面所有完成才能執(zhí)行下一步。因此,這里 webdriver 提供了一種更加智能的等待方式:顯示等待 spa

Explicit Wait(顯式等待)

wait = WebDriverWait(driver, 10) # 設(shè)置顯示等待時間為 10s
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ‘#kw’)))# 判斷條件
element.send_keys(“Python”)
彌補(bǔ)了 implicit wait 的不足,能夠經(jīng)過判斷一些條件,再去決定是否等待下去,顯示等待是一種智能程度較高的等待方式,能夠有效的加強(qiáng)腳本的健壯性

Fluent wait(流暢等待,即顯式等待的一種)

可以設(shè)置自己的方法去處理各種等待的問題。

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)//最大等待時間是60秒.withTimeout(60, TimeUnit.SECONDS)//每隔兩秒去找一次元素ele1是否在頁面顯示.pollingEvery(2, TimeUnit.SECONDS)//并且忽略NoSuchElement異常.ignoring(NoSuchElementException.class);//ele1定位過程使用了對象waitWebElement ele1 = wait.until(new Function<WebDriver, WebElement>() {//一個等待的條件public WebElement apply(WebDriver driver) {return driver.findElement(By.id("xxxxxxx"));} });

上面創(chuàng)建了一個 FlentWait 類的一個對象 wait,最大等待時間是 60 秒,每隔兩秒去找一次元素 ele1 是否在頁面顯示。并且忽略 NoSuchElement 異常。下面的元素定位,ele1 定位過程使用了對象 wait,然后里面新建了一個函數(shù),只需要把這個函數(shù)當(dāng)做是一個等待的條件就很好理解。

以上是今天的分享,你學(xué)廢了嗎~
想學(xué)習(xí)更多干貨知識和前沿技術(shù)?
想結(jié)識測試行業(yè)大咖和業(yè)界精英?
歡迎關(guān)注2022 MTSC大會(第十屆中國互聯(lián)網(wǎng)測試開發(fā)大會)>>>

總結(jié)

以上是生活随笔為你收集整理的Selenium 定位总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。