2017-09-05 79 views
0

我正在用Selenium Chrome WebDriver最新版本構建一個小型自動測試腳本,但是現在我面臨一個問題,即使在切換到iFrame時也嘗試獲取WebElement。Selenium - 在iFrame中獲取WebElement時出錯

這是HTML的構建方式:

HTML part

你可以檢查一下,還有另外一個頁面「鑲嵌」裏面的iFrame,並且按鈕的定義如下(這是我選擇的一部分):

Inner Button

這是我使用來獲取WebElement的方式(顯然不及格):

WebElement frameAperturar = 
driver.findElement(By.xpath("//iframe[@title='Aperturar']")); 

driver.switchTo().frame(frameAperturar); 

asociarSiniestroButton = driver.findElement(By.xpath("//button[@aria-label='Asociar Siniestro']")); 
asociarSiniestroButton.click(); 

這是我當我試圖讓WebElement異常:

no such element: Unable to locate element: {"method":"xpath","selector":"//button[@aria-label='Asociar Siniestro']"} 

(會話信息:鉻= 60.0.3112.113)

你知道我怎麼能得到的元素在切換到框架後,iFrame內的頁面?

+0

什麼是你得到 – SaiPawan

+0

這個錯誤是我得到了異常:「沒有這樣的元素:找不到元素:{」方法「:」的XPath「」 (會話信息:chrome = 60.0.3112.113) (驅動程序信息:chromedriver = 2.32.498550(9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform = Windows NT 6.1(選擇器「:」//按鈕[@ aria-label ='Asociar Siniestro']「} (警告:服務器沒有提供任何堆棧跟蹤信息)「 –

+0

已更新my anwer –

回答

0

我是新來硒,但好像你的按鈕其實是「跨越」和XPath不會像這樣工作,嘗試//span[contains(text(),'Asociar Siniestro')]

+0

他確實有一個具有相同類的按鈕,所以他的xpath是正確的,但可能是點擊控制可能不是該元素,因此你的xpath可以工作 –

0

使用此XPath

//span[@class='apexButtonText'][contains(text(),'Asociar Siniestro')] 
1

您可以用實際選擇一個iFrame下面的方法: -

  • 幀(指數)
  • 幀(該幀的幀[或] Id的名稱)
  • 幀(WebElement frameElement)
  • defaultContent()

因此可以通過將任何高於約幀信息進行切換。是的,你需要根據需要採取行動

例切換每次: -

driver.SwitchTo().Frame(0); 

driver.SwitchTo().Frame("top"); 

....在框架

driver.SwitchTo().defaultContent(); 

driver.SwitchTo().Frame("navigation"); 

執行你的行動....在框架執行

driver.SwitchTo().defaultContent(); 

嘗試下面的XPath你的行動

//span[@class='apexButtonText' and contains(.,'Asociar Siniestro')] 

OR

//span[contains(text(),'Asociar Siniestro')] 

OR

//span[@class='apexButtonText'][contains(text(),'Asociar Siniestro')] 

OR

//button[@aria-label='Asociar Siniestro']//span[contains(.,'Asociar Siniestro')] 

希望它會幫助你:)

相關問題