Selenium 无法定位 iframe 元素

我想在 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)


青春有我
浏览 196回答 4
4回答

慕村225694

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

Qyouu

在 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 4driver.switchTo().frame(0);

海绵宝宝撒

看来你很亲密。要切换到所需的,<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']")));

喵喔喔

您可以委托此手动 iframe 切换并仅搜索您需要的元素。SearchByFrames searchInFrame = searchFactory.search(() -> driver.findElement(By.tagName("body"))); Optional<WebElement> elem = searchInFrame.getElem();它会在所有可用的 iframe 中寻找您的元素,它运行稳定且快速。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java