能否請你解釋一下如何用一小段代碼處理Selenium WebDriver中的多個框架。如何處理硒web驅動程序中的多個框架?
回答
您只能使用WebDriver在一幀內搜索。要與另一個框架中的元素進行交互,您需要「切換」它。然後司機會將其上下文轉換到該框架中,並且您可以在其中工作。
一小塊代碼
driver.switchTo().frame()
methods
大功告成後,使用
driver.switchTo().defaultContent();
此外,more documentation切換回主窗口。
在Selenium中使用iFrames,我們有不同的方法來根據需要處理框架。請看下面處理幀的方法
driver.switchTo().frame(int arg0);
通過其索引(從零開始)選擇一個幀。也就是說,如果頁面有多個幀(大於1),則第一幀將位於索引「0」,第二幀位於索引「1」,依此類推。
一旦框架被選中或導航,WebDriver接口上的所有後續調用都是針對該框架進行的。即駕駛員的重點將放在車架上。我們嘗試在頁面上執行的任何操作都不起作用,並在我們導航/切換到Frame時拋出元素。
參數索引 - (從零開始)索引 返回:驅動程序集中在給定幀(當前幀) 拋出:NoSuchFrameException - 如果未找到幀。例如:if iframe id = webklipper-publisher-widget-container-frame,它可以寫成driver.switchTo().frame(「webklipper-publisher-widget-container-frame」);以下是使用frame id與switchToFrame配合使用的代碼片段。
public void switchToFrame(int frame) {
try {
driver.switchTo().frame(frame);
System.out.println("Navigated to frame with id " + frame);
} catch (NoSuchFrameException e) {
System.out.println("Unable to locate frame with id " + frame
+ e.getStackTrace());
} catch (Exception e) {
System.out.println("Unable to navigate to frame with id " + frame
+ e.getStackTrace());
}
}driver.switchTo().frame(String arg0);
通過其名稱或ID選擇一個框架。通過匹配名稱屬性定位的框架總是優先於通過ID匹配的框架。 參數:name或Id - 框架的名稱或框架元素的ID。 返回:驅動程序集中在給定幀(當前幀) 拋出:NoSuchFrameException - 如果未找到幀
下面是使用幀名稱的示例代碼片段。
public void switchToFrame(String frame){ 嘗試driver.switchTo()。frame(frame); System.out.println(「導航到名稱框架」+框架); System.out.println(「無法找到帶有ID的幀」+幀 + e.getStackTrace()); System.out.println(「無法導航到帶有ID的幀」+幀 + e.getStackTrace()); } } driver.switchTo()。框架(WebElement frameElement);
使用之前定位的WebElement選擇一個框架。 參數:frameElement - 要切換到的框架元素。 返回:驅動程序關注給定幀(當前幀)。 拋出:NoSuchFrameException - 如果給定的元素既不是iframe也不是框架元素。和StaleElementReferenceException - 如果WebElement已過時。
下面是將元素髮送到和開關的示例代碼。
public void switchToFrame(WebElement frameElement)
{
try
{
if (isElementPresent(frameElement))
driver.switchTo().frame(frameElement);
System.out.println("Navigated to frame with element "+ frameElement);
} else {
System.out.println("Unable to navigate to frame with element "+ frameElement);
}
} catch (NoSuchFrameException e) {
System.out.println("Unable to locate frame with element " + frameElement + e.getStackTrace());
} catch (StaleElementReferenceException e) {
System.out.println("Element with " + frameElement + "is not attached to the page document" + e.getStackTrace());
} catch (Exception e) {
System.out.println("Unable to navigate to frame with element " + frameElement + e.getStackTrace());
}
}
當有多個幀(在A面框鏡架)有些時候,我們需要先切換到父框架,然後我們需要切換到子框架。下面是使用多個框架的代碼片段。
public void switchToFrame(String ParentFrame, String ChildFrame) {
try {
driver.switchTo().frame(ParentFrame).switchTo().frame(ChildFrame);
System.out.println("Navigated to innerframe with id " + ChildFrame
+ "which is present on frame with id" + ParentFrame);
} catch (NoSuchFrameException e) {
System.out.println("Unable to locate frame with id " + ParentFrame
+ " or " + ChildFrame + e.getStackTrace());
} catch (Exception e) {
System.out.println("Unable to navigate to innerframe with id "
+ ChildFrame + "which is present on frame with id"
+ ParentFrame + e.getStackTrace());
}
}
使用框架後,主要重要的是要回到網頁。如果我們不切換回默認頁面,驅動程序會拋出異常。以下是切換回默認內容的代碼片段。
public void switchtoDefaultFrame() {
try {
driver.switchTo().defaultContent();
System.out.println("Navigated back to webpage from frame");
} catch (Exception e) {
System.out
.println("unable to navigate back to main webpage from frame"
+ e.getStackTrace());
}
}
- 1. 如何使用硒web驅動程序處理Flex網格?
- 2. 如何使用硒web驅動程序處理Windows下載對話框
- 3. 如何點擊一個複選框使用Java的硒web驅動程序?
- 4. 如何在python中保存硒web驅動程序的狀態?
- 5. 保護硒web驅動程序交互
- 6. Rails 3.2硒web驅動程序測試
- 7. 硒web驅動程序查找元素
- 8. 硒Web驅動程序單擊
- 9. Selenium Web驅動程序和硒RC
- 10. 如何在硒web驅動程序中找到以下HTML?
- 11. 硒web驅動程序如何在JavaScript中工作?
- 12. 如何使用硒web驅動程序自動化OTP?
- 13. 硒遠程Web驅動程序:如何開始從客戶
- 14. 如何通過使用框架來處理Selenium Web驅動程序TestNg中的子窗口?
- 15. 如何使用Selenium Web驅動程序處理Flash對象
- 16. 如何使用硒web驅動程序獲取gwt combobox的值?
- 17. 如何整合中硒的webdriver關鍵字驅動框架
- 18. 選擇複選框使用硒web驅動程序與python
- 19. 如何在多個驅動程序中處理Verilog中的總線
- 20. Chrome驅動程序和量角器中的硒驅動程序
- 21. Selenium Node API Web驅動程序等待超時處理程序
- 22. 在RIDE(機器人框架)中添加chrome web驅動程序
- 23. 如何使用硒web驅動程序測試Magento項目?
- 24. 如何使用硒web驅動程序控制「Ajax」?
- 25. C#硒web驅動程序如何做while循環元素
- 26. 帶小應用程序的硒web驅動程序
- 27. 使用java的硒web驅動程序基本程序
- 28. Python中硒的網絡驅動器多處理
- 29. 硒2鉻驅動程序
- 30. .NET框架中的事件處理程序和多線程處理