我想在 iframe 中找到輸入元素,但是 selenium 無法找到它。我使用了 和switchTo().frame(id),switchTo().frame(index)但都不起作用。這是我的代碼:driver.switchTo().defaultContent();
WebElement?ele?=?driver.findElement(By.xpath("http://iframe[contains(id,?'braintree-hosted-field-number')]"));
driver.switchTo().frame(ele);錯誤信息:沒有這樣的元素:無法定位元素:{"method":"xpath","selector":"http://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("http://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
提交
取消