根据选项卡选择,将显示两个不同的视图。我能够在第一个选项中获取 Webelements 的上下文,但无法获取剩余选项卡选择的上下文。
问题是 iframe 名称对于两个选择是唯一的,但它们通过 DIV 选项卡进行区分。
请找到我的 html 代码并建议一种解决方法来获取 DIV 标记“folderProducer”中的 Webelement 上下文,
注意能够通过默认切换到语句来访问元素“customerSearchForm:corpLastName”。
根据选项卡选择,将显示两个不同的视图。我能够在第一个选项中获取 Webelements 的上下文,但无法获取剩余选项卡选择的上下文。
问题是 iframe 名称对于两个选择是唯一的,但它们通过 DIV 选项卡进行区分。
请找到我的 html 代码并建议一种解决方法来获取 DIV 标记“folderProducer”中的 Webelement 上下文,
注意能够通过默认切换到语句来访问元素“customerSearchForm:corpLastName”。
由于您没有发布您编写的 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
问题不在于元素具有相同的名称,而在于它们是相同的(即使它们的父元素具有相同的 ID)。
我肯定会向网站的开发人员提出这个问题(事实上,两个元素具有相同的 ID……这在网站上是一个很大的禁忌)。
无论如何,您都可以driver.findElements(By.name("content")).get(N)
获取第 N 个 Iframe,然后切换到它。
在这种情况下,Xpath 是一种查找元素的糟糕方法。您可以通过它们的 Xpath 来区分这两个元素。