37

WebDriver で Java を使用しています。2 つのフレームを切り替える必要があります。私はセレンIDEでテストケースを記録しました.selectFrame relative = top select Frame = middle Frameとして値を取得しました。

ただし、relative=top と middleFrame を認識できないという問題があります。Javaを使用したSelenium WebDriverでこの問題を解決するにはどうすればよいですか?

4

7 に答える 7

57

WebDriver のdriver.switchTo().frame()メソッドは、次の 3 つの引数のいずれかを取ります。

  • 数。

    (0 から始まる) インデックスでフレームを選択します。つまり、ページに 3 つのフレームがある場合、最初のフレームは index 0、2 番目のフレームは index 1 、3 番目のフレームは index になります2。フレームが選択されると、WebDriver インターフェイスでの後続のすべての呼び出しがそのフレームに対して行われます。

  • 名前または ID。

    名前または ID でフレームを選択します。name 属性に一致するフレームは、ID に一致するフレームより常に優先されます。

  • 以前に見つかっWebElementた .

    以前に配置された WebElement を使用してフレームを選択します。

ID/名前でフレームを取得するか、フレームdriver.findElement()を見つければ問題ありません。

于 2012-06-04T19:23:29.523 に答える
17

フレームに切り替えるには:

driver.switchTo.frame("Frame_ID");

再度デフォルトに切り替えます。

driver.switchTo().defaultContent();
于 2014-02-16T05:32:00.063 に答える
2

フレームに切り替えたら、別のフレームのWeb要素にアクセスするためにデフォルトのコンテンツに戻す必要があります。Webdriverは、現在のフレーム内で新しいフレームを見つける傾向があるため。

driver.switchTo().defaultContent()
于 2013-01-26T19:40:35.467 に答える
2

以下も使用できます。

driver.switch_to.frame(0)

(0)html の最初の iframe です。

デフォルトのコンテンツに戻すには:

driver.switch_to.default_content()
于 2015-03-26T08:50:49.097 に答える
1

このコードは groovy であるため、ほとんどの場合、何らかの手直しが必要になります。最初のパラメーターは URL で、2 番目のパラメーターは試行回数を制限するカウンターです。

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;
}
于 2012-06-04T22:53:04.640 に答える