硒无法找到iframe元素

时间:2019-08-28 03:23:20

标签: java selenium iframe

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

我同时使用了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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

尝试将WebDriverWaitframeToBeAvailableAndSwitchToIt一起使用,就像这样:

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;

答案 2 :(得分:0)

您似乎很近。要切换到所需的<iframe>,您需要:

  

在这里您可以找到有关Ways to deal with #document under iframe的详细讨论

答案 3 :(得分:0)

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

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

它将在所有可用的 iframe 中查找您的元素,它运行稳定且快速。