在做web應(yīng)用的自動(dòng)化測(cè)試時(shí),定位元素是必不可少的,這個(gè)過(guò)程經(jīng)常會(huì)碰到定位不到元素的情況(報(bào)selenium.common.exceptions.NoSuchElementException),一般可以從以下幾個(gè)方面著手解決:
1.Frame/Iframe原因定位不到元素:
這個(gè)是最常見(jiàn)的原因,首先要理解下frame的實(shí)質(zhì),frame中實(shí)際上是嵌入了另一個(gè)頁(yè)面,而webdriver每次只能在一個(gè)頁(yè)面識(shí)別,因此需要先定位到相應(yīng)的frame,對(duì)那個(gè)頁(yè)面里的元素進(jìn)行定位。
解決方案:
如果iframe有name或id的話,直接使用switch_to_frame("name值")或switch_to_frame("id值")。如下:
driver=webdriver.Firefox()
driver.get(r'http://www.126.com/')
driver.switch_to_frame('x-URS-iframe')??#需先跳轉(zhuǎn)到iframe框架
username=driver.find_element_by_name('email')
username.clear()
如果iframe沒(méi)有name或id的話,則可以通過(guò)下面的方式定位:
#先定位到iframe
elementi= driver.find_element_by_class_name('APP-editor-iframe')
#再將定位對(duì)象傳給switch_to_frame()方法
driver.switch_to_frame(elementi)
如果完成操作后,可以通過(guò)switch_to.parent_content()方法跳出當(dāng)前iframe,或者還可以通過(guò)switch_to.default_content()方法跳回最外層的頁(yè)面。