无法切换到具有相同名称但在同一页面的不同DIV标签中的iFrame

时间:2013-08-30 13:00:33

标签: selenium selenium-webdriver

根据标签选择,将显示两个不同的视图。我能够在第一个选项中获取Webelements的上下文,但无法获取剩余选项卡选择的上下文。

问题是iframe名称对于两个选择是唯一的,但它们通过DIV选项卡是不同的。

请找到我的html代码,并建议在DIV标记“folderProducer”中获取Webelement上下文的解决方法,

请注意,可以使用默认切换到语句来访问元素“customerSearchForm:corpLastName”。

enter image description here

3 个答案:

答案 0 :(得分:3)

由于您没有发布您编写的Java代码,所以我无法指出究竟出了什么问题。

然而,无论如何,我认为同样的事情并不重要。 (但这真的很糟糕,你应该改变它)

请记住,switchTo().frame()有三个重载,你不应该使用索引或名称/ id,而是传入frame元素本身。请参阅source code here

  

WebDriver frame(int index); //不稳定

     

WebDriver frame(String nameOrId); //不适合你的情况,因为它们相同

     

WebDriver框架(WebElement frameElement); //你想要的那个

即使driver.findElements(By.name("content")).get(N)也不好,因为它取决于元素的顺序,有效但不优雅。

您可以按父<div> id属性或框架src属性找到框架。

// switch out of all frames, just in case, you might not need this line here
driver.switchTo().defaultContent();

// switch to customer frame
WebElement customerFrame = driver.findElement(By.cssSelector("#folderCustomer iframe"));
// alternative css locator: By.cssSelector("iframe[src*='customerSearch']")
driver.switchTo().frame(customerFrame);

// now inside customer frame, you can do stuff

// when you done, switch out of it
driver.switchTo().defaultContent();

// switch to producer frame now
WebElement producerFrame = driver.findElement(By.cssSelector("#folderProducer iframe"));
// alternative css locator: By.cssSelector("iframe[src*='producerSearch']")
driver.switchTo().frame(producerFrame);

// now inside producer frame, you can do stuff

答案 1 :(得分:2)

问题不在于元素具有相同的名称,而在于它们是相同的(即使它们的父母具有相同的ID)。

我肯定会与网站的开发者联系起来(事实上两个元素具有相同的ID ......这在网站上是一个很大的禁忌)。

无论如何,您可以driver.findElements(By.name("content")).get(N)获取第N个iframe,然后切换到它。

答案 2 :(得分:0)

在这种情况下,Xpath是查找元素的最佳方式。您可以通过Xpath区分这两个元素。