8

だから今、フレームに名前やIDがないときに、Selenium 2のフレームにフォーカスを切り替える方法を見つけようとしていますか? 名前付きフレームの場合、次のようにします。

driver.SwitchTo().Frame(FrameName);

しかし、名前がないのは何ですか?誰もこれを経験したことがありますか?

4

5 に答える 5

11

driver.switchTo.frame() は、フレーム名または整数を受け入れるようにオーバーロードされています。この int は、使用可能なフレームの 0 ベースのインデックスです。最初のフレームは 0、2 番目のフレームは 1 などです。

この HTML ページに対して Java バインディングと Firefox を使用して、非常に簡単なテストを実行しました。

<html>
<frameset rows="50%,50%">
    <frame src="frame_a.htm" />
    <frame src="frame_b.htm" />
</frameset>
</html>

driver.switchTo().frame(0); を正常に使用できます。フレーム a と driver.switchTo().frame(1) を参照します。フレームにアクセスする b.

于 2010-09-10T00:07:18.983 に答える
1

フレームのインデックスを使用できます。フレームの名前と ID がないため、driver.switchTo().frame(int frameIndex)

于 2010-11-10T22:03:42.650 に答える
0

iframe-nameの代わりにiframeのIDを指定するだけです。

私の以下の例を見てください、それは私のために働きました。
この例では、ページ内の1つのiframeに切り替えて、そのiframe内の要素である「worksheet0」をクリックしています。

コードを使用してください:

driver.switchTo().frame("topframe");    
    WebElement worksheet0 = driver.findElement(By.xpath("//*@id='reportSelect:Worksheet_lbl']"));               worksheet0.click();             

iframeのHTML:

  < iframe id="topframe" height="83px" frameborder="0" width="100%" scrolling="NO" '1331808552380'"="" +="" src="initialize.do?init=header&cacheBuster=" name="topframe" marginheight="0" marginwidth="0">
于 2012-03-15T12:05:00.207 に答える
0

(他の回答が示唆するように)インデックスを使用することに加えて、C#ではtagNameでiFrameを選択できます。この例では、ページに iFrame が 1 つだけあると想定しています。

try
{
    var iFrameElement = Driver.FindElementByTagName("iFrame");
    var driver = Driver.SwitchTo().Frame(this.iFrameElement);    
    var element = driver.FindElement(selector);

    // do what you need with the element
}
finally
{
    // don't forget to switch back to the DefaultContent
    Driver.SwitchTo().DefaultContent();
}

注: Driver.SwitchTo().DefaultContent(); を呼び出す前に、たとえば IWebElement .Text または .Click から情報を取得する必要があります。

これらの拡張メソッドを作成して支援しました

public static IWebDriver SwitchToIFrame(this RemoteWebDriver driver)
{
    // http://computerrecipes.wordpress.com/2012/08/23/selenium-webdriver-interact-with-an-element-inside-an-iframe/
    // http://stackoverflow.com/questions/3549584/selenium-2-switching-focus-to-a-frame-that-has-no-name-id
    var iFrameElement = driver.FindElementByTagName("iFrame");
    return driver.SwitchTo().Frame(iFrameElement);
}

public static void SwitchOutOfIFrame(this IWebDriver driver)
{
    driver.SwitchTo().DefaultContent();
}

拡張メソッドの使用例:

public void ClickPrintButton()
{
    var iFrameDriver = Browser.Driver.SwitchToIFrame();
    try
    {
        iFrameDriver.FindElement(By.Id("saveButton")).Click();
    }
    finally
    {
        Browser.Driver.SwitchOutOfIFrame();
    }
}
于 2014-04-02T14:12:56.273 に答える
0

セレンでは、フレームの相対位置がわかっている場合は、文字列「relative = up」を指定してselectFrameコマンドを使用して、フレームを上に移動したり、selenium.SelectFrame("relative=up");「relative = top」を使用してトップフレームにジャンプしたりできます。

于 2010-08-24T14:14:48.227 に答える