簡體   English   中英

如何使用Java在Selenium WebDriver中切換幀

[英]How to switch between frames in Selenium WebDriver using Java

我正在使用Java與WebDriver.I必須在兩幀之間切換。 我已經在selenium IDE中記錄了測試用例,並且我得到的值為selectFrame relative = top select Frame = middle Frame

但是有一個問題是它無法識別relative = top和middleFrame。 如何使用Java在Selenium WebDriver中解決此問題?

WebDriver的driver.switchTo().frame()方法接受三個可能的參數之一:

  • 一個號碼。

    按其(從零開始)索引選擇一個幀。 也就是說,如果頁面具有三個幀,則第一幀將位於索引0 ,第二幀位於索引1 ,第三幀位於索引2 選擇框架后,WebDriver界面上的所有后續調用都將進入該框架。

  • 名稱或ID。

    按名稱或ID選擇框架。 通過匹配名稱屬性定位的幀始終優先於ID匹配的幀。

  • 以前找到的WebElement

    使用先前定位的WebElement選擇框架。

通過它的id / name獲取幀或通過driver.findElement()找到它,你會很好。

切換到一個框架:

driver.switchTo.frame("Frame_ID");

再次切換到默認值。

driver.switchTo().defaultContent();

首先,您必須找到幀ID並在WebElement定義它

例如: - WebElement fr = driver.findElementById("id");

然后使用以下代碼切換到幀: - driver.switchTo().frame("Frame_ID");

示例腳本: -

WebElement fr = driver.findElementById("theIframe");

driver.switchTo().frame(fr);

Then to move out of frame use:- driver.switchTo().defaultContent();

這段代碼很時髦,所以很可能你需要做一些返工。 第一個參數是一個網址,第二個是限制嘗試的計數器。

public boolean selectWindow(window, maxTries) {
    def handles
    int tries = 0
    while (true) {
        try {
            handles = driver.getWindowHandles().toArray()
            for (int a = handles.size() - 1; a >= 0 ; a--) { // Backwards is faster with FF since it requires two windows
                try {
                    Log.logger.info("Attempting to select window: " + window)
                    driver.switchTo().window(handles[a]);
                    if (driver.getCurrentUrl().equals(window))
                        return true;
                    else {
                        Thread.sleep(2000)
                        tries++
                    }
                    if (tries > maxTries) {
                        Log.logger.warn("Cannot select page")
                        return false
                    }
                } catch (Exception ex) {
                    Thread.sleep(2000)
                    tries++
                }
            }
        } catch (Exception ex2) {
            Thread.sleep(2000)
            tries++
        }
    }
    return false;
}

需要確保一旦切換到一個幀,需要切換回默認內容以訪問另一幀中的webelements。 因為Webdriver傾向於在當前幀內找到新幀。

driver.switchTo().defaultContent()

您還可以使用:

driver.switch_to.frame(0)

(0)是html上的第一個iframe。

切換回默認內容:

driver.switch_to.default_content()

也可以將WebDriverWait與ExpectedConditions一起使用(以確保Frame可用)。

  1. 使用字符串作為參數

     (new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frame-name")); 
  2. 使用定位器作為參數

     (new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame-id"))); 

更多信息可以在這里找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM