2017-09-05 144 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')] 

希望它会帮助你:)