1

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

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

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

注意能够通过默认切换到语句来访问元素“customerSearchForm:corpLastName”。

在此处输入图像描述

4

3 回答 3

3

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

但是,无论如何,我认为相同的 id 并不重要。(但这真的很糟糕,你应该改变它)

请记住,switchTo().frame()有三个重载,您不应该使用索引或名称/ID,而是传入框架元素本身。在此处查看源代码

WebDriver 框架(整数索引);// 不稳定

WebDriver 框架(字符串名称或 ID);// 不适用于您的情况,因为它们相同

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

Evendriver.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
于 2013-08-30T22:24:09.467 回答
2

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

我肯定会向网站的开发人员提出这个问题(事实上,两个元素具有相同的 ID……这在网站上是一个很大的禁忌)。

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

于 2013-08-30T15:16:37.733 回答
0

在这种情况下,Xpath 是一种查找元素的糟糕方法。您可以通过它们的 Xpath 来区分这两个元素。

于 2013-08-31T08:43:27.083 回答