根据标签选择,将显示两个不同的视图。我能够在第一个选项中获取Webelements的上下文,但无法获取剩余选项卡选择的上下文。
问题是iframe名称对于两个选择是唯一的,但它们通过DIV选项卡是不同的。
请找到我的html代码,并建议在DIV标记“folderProducer”中获取Webelement上下文的解决方法,
请注意,可以使用默认切换到语句来访问元素“customerSearchForm:corpLastName”。
答案 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区分这两个元素。