Java 硒罐';t定位iframe元素

Java 硒罐';t定位iframe元素,java,selenium,iframe,Java,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.swit

我想在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);
错误消息:

没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“//iframe[contains(id,'braintree hosted field number')]” (会话信息:chrome=76.0.3809.132)

屏幕截图:


在iFrame中,我们可以使用名称、id或索引进行切换

driver.switchTo().frame("name or ID");    
driver.switchTo().frame(index);
一帧-直接切换到该帧(使用上述代码)

多帧-切换到精确帧

嵌套帧-切换到父帧(父帧),然后切换到子帧(内部帧)

切换到ID或名称为的帧如果只有一个iframe,则直接切换到该帧,否则切换到父帧,然后指向子帧

driver.switchTo().frame("braintree-hosted-field-number");
切换到带索引的框架查看您的html,看起来有一个iframe,然后索引以“0”开头。 示例:如果有5个iFrame,则索引将为0 1 2 3 4

driver.switchTo().frame(0);

在iFrame中,我们可以使用名称、id或索引进行切换

driver.switchTo().frame("name or ID");    
driver.switchTo().frame(index);
一帧-直接切换到该帧(使用上述代码)

多帧-切换到精确帧

嵌套帧-切换到父帧(父帧),然后切换到子帧(内部帧)

切换到ID或名称为的帧如果只有一个iframe,则直接切换到该帧,否则切换到父帧,然后指向子帧

driver.switchTo().frame("braintree-hosted-field-number");
切换到带索引的框架查看您的html,看起来有一个iframe,然后索引以“0”开头。 示例:如果有5个iFrame,则索引将为0 1 2 3 4

driver.switchTo().frame(0);

尝试将
WebDriverWait
frametobeavailable一起使用,并切换到it
,如下所示:

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;

尝试将
WebDriverWait
frametobeavailable一起使用,并切换到it
,如下所示:

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;

看来你很接近。要切换到所需的
,您需要:

  • 为所需的
    框架导入WebDriverWait以使其可用并切换到it()
  • 您可以使用以下任一选项:

    • CSS选择器:

    • xpath:

  • 参考:

在这里,您可以找到有关的详细讨论


看来你很接近。要切换到所需的
,您需要:

  • 为所需的
    框架导入WebDriverWait以使其可用并切换到it()
  • 您可以使用以下任一选项:

    • CSS选择器:

    • xpath:

  • 参考:

在这里,您可以找到有关的详细讨论

通过使用,您可以委托此手动iframe切换,只需搜索所需的元素

SearchByFrames searchInFrame = searchFactory.search(() -> driver.findElement(By.tagName("body")));
Optional<WebElement> elem = searchInFrame.getElem();
SearchByFrames searchInFrame=searchFactory.search(()->driver.findElement(按.tagName(“主体”));
可选elem=searchInFrame.getElem();
它将在所有可用的iframe中查找您的元素,工作稳定且快速。

通过使用,您可以委派此手动iframe切换,只需搜索您需要的元素

SearchByFrames searchInFrame = searchFactory.search(() -> driver.findElement(By.tagName("body")));
Optional<WebElement> elem = searchInFrame.getElem();
SearchByFrames searchInFrame=searchFactory.search(()->driver.findElement(按.tagName(“主体”));
可选elem=searchInFrame.getElem();

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

将id更改为@id或just。您应该在xpath中将属性
id
指定为
@id
。如果仍然没有检测到iframe,则检查它是否是另一个父iframe。顺便说一句,发布屏幕截图的html不是一个好主意。@supputuri抱歉,我对发布非常陌生,我应该如何发布html?我还使用了@id,但仍然没有检测到帧。将id更改为@id或just。您应该在xpath中将属性
id
指定为
@id
。如果仍然没有检测到iframe,则检查它是否是另一个父iframe。顺便说一句,发布屏幕截图的html不是一个好主意。@supputuri抱歉,我对发布非常陌生,我应该如何发布html?我还使用了@id,但仍然没有检测到帧。