我想在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)
截屏:
答案 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)
尝试将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;
答案 2 :(得分:0)
您似乎很近。要切换到所需的<iframe>
,您需要:
frameToBeAvailableAndSwitchToIt()
诱导 WebDriverWait 。您可以使用以下任一Locator Strategies:
cssSelector :
new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@id='braintree-hosted-field-number' and contains(@src, 'hosted-fields-frame')]")));
xpath :
new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe#braintree-hosted-field-number[src*='hosted-fields-frame']")));
在这里您可以找到有关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 中查找您的元素,它运行稳定且快速。