Java 硒罐';t定位iframe元素
我想在iframe中找到输入元素,但是selenium无法找到它 我使用了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
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:
- 参考:
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,但仍然没有检测到帧。