Selenium 无法定位 iframe 元素

问题描述 投票:0回答:4

我想在 iframe 中找到输入元素,但是 selenium 无法找到它。

我同时使用了

switchTo().frame(id)
switchTo().frame(index)
,但都不起作用。

这是我的代码:

driver.switchTo().defaultContent();
WebElement ele = driver.findElement(By.xpath("//iframe[contains(id, 'braintree-hosted-field-number')]"));
driver.switchTo().frame(ele);

错误信息:

没有这样的元素:无法定位元素:{"method":"xpath","selector":"//iframe[contains(id, 'braintree-hosted-field-number')]"} (会话信息:chrome=76.0.3809.132)

截图:

Application HTML

java selenium iframe
4个回答
3
投票

尝试将

WebDriverWait
frameToBeAvailableAndSwitchToIt
一起使用,如下所示:

new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("braintree-hosted-field-number")));

导入后:

import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;

0
投票

在 iframe 中我们可以使用名称、id 或索引进行切换

driver.switchTo().frame("name or ID");    
driver.switchTo().frame(index);

一帧-直接切换到该帧(用上面的代码)

多帧 - 切换到确切的帧

嵌套框架 - 切换到父框架(父框架),然后切换到子框架(内框架

driver.switchTo().frame("parent frame");
driver.switchTo().frame("child frame"); 

使用 ID 或名称切换到框架 如果只有一个 iframe 则直接切换到该框架,否则切换到父框架,然后指向子框架。

driver.switchTo().frame("braintree-hosted-field-number");

切换到带有索引的框架看到你的html,看起来好像有一个iframe,然后索引以“0”开头。 示例:如果您有 5 个 iframe,那么索引将为 0 1 2 3 4

driver.switchTo().frame(0);

0
投票

通过使用 https://github.com/nick318/FindElementInFrames,您可以委托此手动 iframe 切换,只需搜索您需要的元素。

SearchByFrames searchInFrame = searchFactory.search(() -> driver.findElement(By.tagName("body")));
Optional<WebElement> elem = searchInFrame.getElem();

它将在所有可用的 iframe 中寻找您的元素,它工作稳定且快速。


0
投票

看来你们已经很接近了。要切换到所需的

<iframe>
,您需要:

这里可以找到关于iframe下处理#document的方法

的详细讨论
© www.soinside.com 2019 - 2024. All rights reserved.