Selenium踩坑記之iFrame的定位與切換

Selenium是瀏覽器自動化測試的工具之一,用過的人都懂他的好,也被他坑的不要不要的。今天就聊聊Selenium的iFrame定位和切換。
對于一個頁面,正常瀏覽的時候,看到的一個完整正常的頁面,但是,看似是整體的頁面的背后,其中是可能會包含iFrame。正因?yàn)榇?,在編寫自動化測試的時候,定位元素就出問題了。

如何定位iFrame

  • 在頁面區(qū)域右鍵,可以看到“This Frame”或者“Reload Frame”的選項(xiàng),那么就可以確定這里是一個iFrame了
  • 通過查看頁面的HTML代碼,查找Frame標(biāo)簽
  • 如果你還想再簡單點(diǎn),那就是直接編寫一個簡單的測試,然后直接只用以下的代碼(以ruby為例)來驗(yàn)證:
p @driver.find_elements(:tagName => "frame").size

如何切換iFrame

其實(shí)如果確定了iFrame之后,切換的代碼就很簡單了(以ruby代碼為例):

@driver.switch_to.frame(iFrame)

iFrame這里可以是三個類型:

  1. index,即整個頁面中frame的個數(shù)的index,從0開始。比如頁面中只有一個iFrame,就是0,兩個這是0和1
@driver.switch_to.frame(1)
  1. Name or ID,這個無需多說,就是frame的這個name或者ID
@driver.switch_to.frame(frameName)
  1. Web Element,即通過css或者xpath等方式定位元素來進(jìn)行切換
@driver.switch_to.frame(@driver.find_element(:xpath => "http://iframe[contains(@id, 'frame')]"))

嵌套iFrame

很多時候,你可能還會遇到嵌套的iFrame的情況,嗯,其實(shí)情況也很好辦,一直切換就好了。不過,還要記得如何切換回上層的iFrame呢?

@driver.switch_to.parentFrame

或者 切換到main frame

@driver.switch_to.defaultContent

嗯,有了以上的這些方法,基本可以跳過Selenium中的iFrame相關(guān)的坑了。預(yù)祝各位在Selenium中都可以順利的測試起來……

參考:Handling iFrames in Selenium Webdriver

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容