public void findInAllFrames(WebElement e, String targetIdStr) {
List l = e.findElements(By.tagName("iframe"));
for(int inx=0; inx targets = l.get(inx).findElements(By.id(targetIdStr));
if(targets.size()>0) {
// Do something with your targets
}
findInAllFrames(l.get(inx), targetIdStr);
}
}
寫自己的遞迴查找器應該很容易。抱歉,我不懂 python,但在 Java 中它會是這樣的:
否,無法通過 Selenium,無需切換到對應的
iframe
。原因:
載入頁面時,Selenium 的焦點預設會保留在頂部視窗上。 頂部視窗包含其他
<iframes>
和框架集。因此,當我們需要與iframe 內的WebElement 進行互動時,我們必須透過以下方法之一切換到對應的<iframe>
:幀切換方法:
我們可以透過3種方式切換到框架。
按框架名稱:
Name iframe 的屬性,透過它我們可以切換到它。
範例:
按幀 ID:
iframe的ID屬性,透過它我們可以切換到它。
範例:
按幀索引:
假設頁面有10個frame,我們可以透過索引切換到iframe。
範例:
切換回主機:
我們可以使用
default_content()
或#parent_frame()
切換回主框架範例:
切換框架的更好方法:
切換框架的更好方法是透過將
expected_conditions
設定為frame_to_be_available_and_switch_to_it
##WebDriverWait
# 以獲得預期框架的可用性,如下所示:透過幀 ID:
透過框架名稱:
透過框架Xpath:
透過框架CSS:
參考
您可以在以下位置找到相關的詳細討論: