国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Selenium無法定位元素的幾種解決方案

這篇具有很好參考價(jià)值的文章主要介紹了Selenium無法定位元素的幾種解決方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?? 視頻學(xué)習(xí):文末有免費(fèi)的配套視頻可觀看

???關(guān)注公眾號(hào)【互聯(lián)網(wǎng)雜貨鋪】,回復(fù) 1?,免費(fèi)獲取軟件測(cè)試全套資料,資料在手,漲薪更快

1、frame/iframe表單嵌套

WebDriver只能在一個(gè)頁面上對(duì)元素識(shí)別與定位,對(duì)于frame/iframe表單內(nèi)嵌的頁面元素?zé)o法直接定位。

解決方法:

driver.switch_to.frame(id/name/obj)

switch_to.frame()默認(rèn)可以直接取表單的id或name屬性。如果沒有可用的id和name屬性,可以先定位到frame/iframe,再將定位對(duì)象傳給switch_to.frame(對(duì)象)方法。

xf = driver.find_element_by_xpath('//*[@class="if"]')
driver.switch_to.frame(xf)
...
 
driver.switch_to.parent_frame() 切到父frame。影響性能,可以提給開發(fā),讓其改進(jìn)。
driver.switch_to.default_content() 跳回最外層的頁面

2、頁面跳轉(zhuǎn)到新標(biāo)簽頁,或彈出警告框等

在頁面操作過程中有時(shí)候點(diǎn)擊某個(gè)鏈接會(huì)彈出新窗口,這時(shí)就需要切換焦點(diǎn)到新窗口上進(jìn)行操作。

解決方法1:

driver.switch_to.window(window_handle)切換到新窗口。

首先獲取當(dāng)前窗口的句柄driver.current_window_handle,接著打開彈出新窗口,獲得當(dāng)前打開的所有窗口的句柄driver.window_handles。通過for循環(huán)遍歷handle,如果不等于第一次打開窗口的句柄,那么一定是新窗口的句柄,因?yàn)閳?zhí)行過程只打開了兩個(gè)窗口;改變條件,如果等于第一次打開窗口的句柄,那么可以切換回第一次打開的窗口。

解決方法2:

對(duì)于JavaScript生成的alert、confirm以及prompt,無法使用前端工具對(duì)彈出窗口進(jìn)行定位的,使用driver.switch_to.alert方法定位彈出框。

alert的方法有:

  • .accept() ? ?'等同于點(diǎn)擊“確認(rèn)”或“OK”'
  • .dismiss() ? ?'等同于點(diǎn)擊“取消”或“Cancel”'
  • .text ? ? ? ?'獲取alert文本內(nèi)容,對(duì)有信息顯示的alert框'
  • .send_keys(text) ? ?'發(fā)送文本,對(duì)有提交需求的prompt框'
  • .authenticate(username,password) ? ?'驗(yàn)證,針對(duì)需要身份驗(yàn)證的alert'

?
3、頁面元素失去焦點(diǎn)導(dǎo)致腳本運(yùn)行不穩(wěn)定

解決方法:

driver.switch_to.active_element 遇到腳本不穩(wěn)定,有時(shí)會(huì)失去焦點(diǎn)導(dǎo)致測(cè)試失敗的情況下,可以先切到焦點(diǎn)元素再進(jìn)行操作。注意.active_element后面不帶括號(hào)()。

下面是一個(gè)參考案例:

'最初的 “右擊鼠標(biāo) → 新建文件夾 → 輸入文件夾名稱” 的代碼'

l = driver.find_element_by_id('pm_treeRoom_1_span')
ActionChains(driver).context_click(l).perform()
driver.find_element_by_class_name('fnew').click()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="pm_treeRoom_1_ul"]/li[...]').send_keys('filename')
time.sleep(2)

結(jié)果這種操作總會(huì)導(dǎo)致輸入框失去焦點(diǎn),直接消失,更不能send_keys進(jìn)去了,直接報(bào)錯(cuò)。

'修改后的代碼如下'

driver.find_element_by_class_name('fnew').click()
time.sleep(2)
driver.switch_to.active_element.send_keys('filename')
time.sleep(2)

4、使用Xpath或CSS定位

find_element_by_xpath("http://標(biāo)簽[屬性='值']")

使用Xpath/CSS方法,非常適合定位屬性值動(dòng)態(tài)生成、不容易定位的元素。如果不想指定標(biāo)簽,則可以使用“*”代替,使用xpath不局限于id、name和class這三個(gè)屬性,元素的任意屬性值都可以使用,只要它能唯一的標(biāo)識(shí)一個(gè)元素。

解決方法1:

如果一個(gè)元素沒有唯一屬性,那么我們可以一級(jí)一級(jí)向上查找,直到找到可以唯一定位元素的屬性,再向下查找其子元素。
find_element_by_xpath("http://form[@id='form']/span[2]/input") 首先通過唯一標(biāo)識(shí)屬性id=form定位最外層元素,接著找到最外層元素下的第2個(gè)span標(biāo)簽的元素為父元素,最后向下查找定位到父元素下標(biāo)簽為input的子元素。

解決方法2:

如果一個(gè)屬性不能唯一地區(qū)分一個(gè)元素,那么使用多個(gè)屬性來唯一地定位一個(gè)元素。
find_element_by_xpath("http://input[@id='kw'and@class='su']/span/input") 首先找到標(biāo)簽為input,id=kw且class=su的元素,接著找到其下標(biāo)簽為span的子元素,繼續(xù)向下查找找到標(biāo)簽為input的子元素。

解決方法3:檢查Xpath描述是否有誤,導(dǎo)致無法定位到元素。

5、頁面還沒加載出來就對(duì)頁面上的元素進(jìn)行操作

因?yàn)榧虞d元素延時(shí)造成的腳本失敗,我們可以通過設(shè)置等待時(shí)間來提升自動(dòng)化腳本的穩(wěn)定性。

解決方法1:

WebDriverWait()顯示等待。等待單個(gè)的元素加載,通常配合until()、until_not()方法使用。

Selenium無法定位元素的幾種解決方案,python,軟件測(cè)試,自動(dòng)化測(cè)試,單元測(cè)試,selenium,測(cè)試工具,功能測(cè)試

即,WebDriverWait(driver, 超時(shí)時(shí)長(zhǎng), 調(diào)用頻率, 忽略異常).until(可執(zhí)行方法, 超時(shí)時(shí)返回的信息)

WebDriverWait(driver,5,1).until(expected_conditions.presence_of_element_located(By.ID,'kw'))

最長(zhǎng)等待時(shí)間為5s,每隔1秒檢查一次id='kw'的元素是否被加載在DOM樹里(并不代表該元素一定可見)。最常用的method是expected_conditions類提供的預(yù)期條件判斷。

is_disappeared= WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id('someId').is_displayed())

最長(zhǎng)等待時(shí)間為30s,每隔1秒檢查一次id='someId'的元素是否從DOM樹里消失,忽略默認(rèn)異常信息NoSuchElementException 和指定的異常信息ElementNotVisibleException。此處匿名函數(shù)lambda的用法具體參考Python語法。

解決方法2:

driver.implicitly_wait(秒) 隱式等待。全局等待,對(duì)所有元素設(shè)置超時(shí)時(shí)間,等待頁面的加載,因此只需要設(shè)置一次即可。這里的時(shí)間是最長(zhǎng)等待時(shí)間(非固定等待時(shí)間)。

解決方法3:

sleep(秒)線程等待。休眠固定的時(shí)間,使用時(shí)需要先引入time模塊的sleep方法from time import sleep。

6、元素被遮擋,不可用,不可見

解決方法1:

driver.maximize_window()由于窗口大小改變引起的頁面元素布局發(fā)生變化,被測(cè)元素被遮擋,可以先將窗口最大化,再進(jìn)行元素定位。

解決方法2:

.is_enabled()由于業(yè)務(wù)原因元素在某些情況下不可用(元素屬性disabled,灰顯),首先檢查測(cè)試步驟是否符合業(yè)務(wù)邏輯,其次確認(rèn)是否為業(yè)務(wù)流程上的Bug。

解決方法3:

.is_displayed()對(duì)于屬性不一定可見的元素,在定位前首先判斷其屬性是否可見,是否被隱藏。

解決方法4:

由于布局不合理導(dǎo)致的元素被遮蓋、或是元素本身缺失引起的無法定位問題屬于Bug,可以提給開發(fā)讓其改進(jìn)。

7、用WebDriver調(diào)用JavaScript代碼代替無法實(shí)現(xiàn)的功能

對(duì)于有些WebDriver沒有提供的方法或者無法實(shí)現(xiàn)的功能,WebDriver提供了driver.execute_script()方法來執(zhí)行JavaScript代碼。

解決方法:

如果頁面內(nèi)容過長(zhǎng),窗口最大化也無法查看到所有元素,可以通過執(zhí)行JavaScript腳本實(shí)現(xiàn)滾動(dòng)條的拖動(dòng)等動(dòng)作。

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

以上語句實(shí)現(xiàn)了拉動(dòng)頁面到底部的功能,其中window.scrollTo(左邊距,上邊距)是JavaScript中用于設(shè)置瀏覽器窗口滾動(dòng)條的水平和垂直位置的代碼。

text = "input text"
driver.execute_script("var obj=document.getElementById('text'); obj.value=' " + text + " ';")

假設(shè)一個(gè)輸入框可以通過id='text'將其定位,卻不能通過send_keys()輸入文本內(nèi)容,可以借助JavaScript代碼來實(shí)現(xiàn)。

video = driver.find_element_by_xpath("body/Section[1]/div/video")
url = driver.execute_script("return arguments[0].currentSrc;", video)
print(url)           '返回文件播放地址'
print("start")      '播放視屏'
driver.execute_script("return arguments[0].play()", video)
sleep(15)           '播放15秒鐘'
print(stop)         '暫停視屏'
driver.execute_script("arguments[0].pause()", video)
...

以上實(shí)現(xiàn)了HTML5視屏<video>標(biāo)簽的部分測(cè)試,更多內(nèi)容參考HTML DOM Video對(duì)象。

其中arguments是JavaScript的內(nèi)置對(duì)象。因?yàn)閷ideo對(duì)象傳給了arguments,所以arguments[0]相當(dāng)于JavaScript腳本的document.getElementsByTagName("video")。JavaScript不支持重載,使用arguments對(duì)象可以模擬函數(shù)重載效果。

8、WebDriver無法操作Windows控件

文件的普通上傳和下載(參考How to auto save files using custom Firefox profile ?),可以通過..send_keys('本地路徑')和find_element_by_partial_link_text('下載鏈接名').click()實(shí)現(xiàn)。

解決方法:

對(duì)于插件上傳,需要操作Windows控件的,可以通過安裝AutoIt工具、編寫腳本、保存為“.au3”文件、轉(zhuǎn)換成“.exe”文件,再由自動(dòng)化腳本os.system("D:\\upfile.exe")實(shí)現(xiàn)上傳/下載。

* 雖然這種方法可以解決文件上傳、下載的操作問題,但是并不推薦。因?yàn)橥ㄟ^python調(diào)用exe程序并不在python的可控范圍內(nèi),執(zhí)行多長(zhǎng)時(shí)間,執(zhí)行過程是否出錯(cuò),都無從自動(dòng)化過程得知。

9、firefox安全性強(qiáng),不允許跨域調(diào)用出現(xiàn)報(bào)錯(cuò)

錯(cuò)誤描述:

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location:

解決辦法:

Firefox 要取消XMLHttpRequest的跨域限制的話,

第一是從 about:config 里設(shè)置 signed.applets.codebase_principal_support = true;(地址欄輸入about:config 即可進(jìn)行firefox設(shè)置);

第二就是在open的代碼函數(shù)前加入類似如下的代碼:

try {
 
 netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
     } catch (e) {
     alert("Permission UniversalBrowserRead denied.");
     }

同時(shí),在這我為大家準(zhǔn)備了一份軟件測(cè)試視頻教程(含面試、接口、自動(dòng)化、性能測(cè)試等),就在下方,需要的可以直接去觀看,也可以直接【點(diǎn)擊文末小卡片免費(fèi)領(lǐng)取資料文檔】

【2024最新版】Python自動(dòng)化測(cè)試15天從入門到精通,10個(gè)項(xiàng)目實(shí)戰(zhàn),允許白嫖。。。文章來源地址http://www.zghlxwxcb.cn/news/detail-834818.html

到了這里,關(guān)于Selenium無法定位元素的幾種解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【selenium】自動(dòng)化測(cè)試中,元素?zé)o法點(diǎn)擊定位等問題的解決:js的使用方法

    【selenium】自動(dòng)化測(cè)試中,元素?zé)o法點(diǎn)擊定位等問題的解決:js的使用方法

    在自動(dòng)化測(cè)試中經(jīng)常會(huì)遇到使用selenium方法定位元素點(diǎn)擊操作失敗的情況,例如,我們想實(shí)現(xiàn)在瀏覽器輸入http://www.baidu.com,進(jìn)入百度首頁后,鼠標(biāo)懸停在“更多產(chǎn)品”上,點(diǎn)擊“全部產(chǎn)品” 若不使用js的話,代碼應(yīng)該如下圖所示: 我們執(zhí)行代碼后,發(fā)現(xiàn)會(huì)報(bào)錯(cuò) 我們?cè)撊绾谓?/p>

    2024年02月08日
    瀏覽(24)
  • selenium無法定位元素問題

    問題起因是這樣的,我用 selenium 完成一些網(wǎng)頁的瀏覽和操作,通過id索引某個(gè)元素的時(shí)候提示找不到該元素,報(bào)錯(cuò)如下: selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id=“tsn_inner”] 我用的是火狐瀏覽器(Firefox),不是谷歌瀏覽器(Chrome),因?yàn)榻裉靵韺?/p>

    2024年01月18日
    瀏覽(16)
  • Nginx 出現(xiàn)403 Forbidden 的幾種解決方案【已解決】

    親測(cè),有效。2023 一、啟動(dòng)用戶和nginx工作用戶不一致所致 查看nginx的啟動(dòng)用戶:打開nginx.conf文件 二、nginx.conf中缺少index的指定的文件。 查看nginx的配置:打開nginx.conf文件 如果在/opt/html/下面沒有index.html的時(shí)候,會(huì)報(bào)403 forbidden。 三、權(quán)限問題,如果nginx沒有操作權(quán)限,也會(huì)

    2024年02月10日
    瀏覽(30)
  • Kafka rebalance 的幾種原因與解決方案

    網(wǎng)上有很多文章講述 Kafka rebalance 的原理,本文是列舉常見的幾種 rebalance 場(chǎng)景。 rebalance 期間,當(dāng)前 consumer group 的所有 consumer 都要暫停消費(fèi),開銷較大。因此應(yīng)該盡量減少 rebalance ,而 relalance 的原因通常是 consumer 數(shù)量變化,常見的幾種情況如下: 如果一個(gè) consumer 剛啟動(dòng),

    2024年02月01日
    瀏覽(20)
  • 解決辦法:IDEA 控制臺(tái)中文亂碼的幾種解決方案

    解決辦法:IDEA 控制臺(tái)中文亂碼的幾種解決方案

    如果沒有進(jìn)行適當(dāng)?shù)呐渲?,IntelliJ IDEA 可能會(huì)導(dǎo)致控制臺(tái)和配置文件中出現(xiàn)中文亂碼等問題,這會(huì)嚴(yán)重干擾編碼過程以及問題追蹤。本文匯總了解決 IDEA 中常見中文亂碼問題的方法,本文的解決辦法為大家提供幫助。 在IDEA 控制臺(tái)輸出中文的時(shí)候,出現(xiàn)亂碼,現(xiàn)象如下: 2.1

    2024年02月04日
    瀏覽(40)
  • selenium元素定位---ElementClickInterceptedException(元素點(diǎn)擊交互異常)解決方法

    目錄 前言: 1、異常原因 2、解決方法: 當(dāng)使用Selenium進(jìn)行元素定位和交互時(shí),可能會(huì)遇到 ElementClickInterceptedException (元素點(diǎn)擊交互異常)的異常。這通常是由于頁面上存在其他元素或彈出窗口遮擋了要點(diǎn)擊的元素。 在編寫ui自動(dòng)化時(shí),執(zhí)行報(bào)錯(cuò)元素?zé)o法點(diǎn)擊:ElementClickInt

    2024年02月12日
    瀏覽(30)
  • JavaWeb中遇到404問題的幾種解決方案

    JavaWeb中遇到404問題的幾種解決方案

    檢查XML路徑配置 在Servlet中加入@WebServlet 檢查class文件是否生成 博主最近也是被404問題所困擾,用過很多方法,現(xiàn)在來分享一點(diǎn)我自己的經(jīng)驗(yàn)技巧,404問題主要是由于訪問路徑和XML中的配置存在了問題,現(xiàn)在提供幾點(diǎn)解決思路(如果不準(zhǔn)確,望見諒) 提示:以下是本篇文章正

    2024年02月08日
    瀏覽(31)
  • idea連接數(shù)據(jù)庫失敗的幾種解決方案

    idea連接數(shù)據(jù)庫失敗的幾種解決方案

    1、先進(jìn)入名字為mysql的數(shù)據(jù)庫 2、找到user表 3、修改root的host為% [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-pWeP9cRh-1677664942027)(https://img2023.cnblogs.com/blog/3103012/202302/3103012-20230227175245772-1975389509.jpg)] 方法一和方法二,都是開放root的權(quán)限為所有人可

    2024年02月04日
    瀏覽(23)
  • IDEA自動(dòng)補(bǔ)全&提示功能消失的幾種解決方案

    IDEA自動(dòng)補(bǔ)全&提示功能消失的幾種解決方案

    編程工具的智能補(bǔ)全功能對(duì)于開發(fā)人員來說非常重要。它可以幫助節(jié)省時(shí)間和減少錯(cuò)誤,提高編碼效率和質(zhì)量。 智能補(bǔ)全功能可以在編碼過程中自動(dòng)提示可能的函數(shù)、變量、等,并提供相應(yīng)的選項(xiàng)供開發(fā)人員選擇。這可以幫助開發(fā)人員更快速地完成代碼,避免拼寫錯(cuò)誤

    2024年04月15日
    瀏覽(25)
  • selenium元素定位防踩坑---StaleElementReferenceException解決方法

    selenium元素定位防踩坑---StaleElementReferenceException解決方法

    目錄 1、異常原因 2. 解決方案 ??更多干貨 完整版文檔下載方式: 執(zhí)行調(diào)試報(bào)錯(cuò):selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document 意思是,引用的元素已過時(shí)。原因是頁面刷新了,此時(shí)當(dāng)然找不到之前頁面的元素,就算

    2024年02月01日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包