为了账号安全,请及时绑定邮箱和手机立即绑定

Selenium 无法定位 iframe 元素

Selenium 无法定位 iframe 元素

青春有我 2023-06-21 15:44:56
我想在 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)
查看完整描述

4 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

尝试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;


查看完整回答
反对 回复 2023-06-21
?
Qyouu

TA贡献1786条经验 获得超11个赞

在 iframe 中,我们可以使用 name、id 或 index 进行切换

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);


查看完整回答
反对 回复 2023-06-21
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

看来你很亲密。要切换到所需的,<iframe>您需要:

  • 所需frameToBeAvailableAndSwitchToIt().

  • 您可以使用以下任一定位器策略:

    • css选择器

      new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@id='braintree-hosted-field-number' and contains(@src, 'hosted-fields-frame')]")));
    • 路径

      new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe#braintree-hosted-field-number[src*='hosted-fields-frame']")));
查看完整回答
反对 回复 2023-06-21
?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以委托此手动 iframe 切换并仅搜索您需要的元素。

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

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


查看完整回答
反对 回复 2023-06-21
  • 4 回答
  • 0 关注
  • 284 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信