我想在 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;
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);
海绵宝宝撒
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']")));
喵喔喔
TA贡献1735条经验 获得超5个赞
您可以委托此手动 iframe 切换并仅搜索您需要的元素。
SearchByFrames searchInFrame = searchFactory.search(() -> driver.findElement(By.tagName("body"))); Optional<WebElement> elem = searchInFrame.getElem();
它会在所有可用的 iframe 中寻找您的元素,它运行稳定且快速。
添加回答
举报
0/150
提交
取消