2016-05-25 19 views
0

私の問題は、私が作業しようとしているページに3つの定義されたiFramesがあります。同じ名前の複数のインスタンスを持つ特定のiFrameを選択してください

<iframe class="col-51" height="560" src="https://attendee.gototraining.com/embed/886b2/catalog/40xxxx bgColor=ffffff" frameborder="0"></iframe> 

<iframe class="col-51" height="560" src="https://attendee.gototraining.com/embed/886b2/catalog/37xxxx bgColor=ffffff" frameborder="0"></iframe> 

<iframe class="col-51" height="560" src="https://attendee.gototraining.com/embed/886b2/catalog/46xxxx bgColor=ffffff" frameborder="0"></iframe> 

私はコマンドをdriver.switchTo.frameしようとしたが、それは唯一私がここに記載されている最初のフレームであると仮定し、インデックス0を見ている:彼らは、以下のすべての名前が付けられています。この最初のフレームを選択すると、実行時にエラーは発生しませんが、フレーム内の要素はまだ表示されません。私は "要素を見つけることができません"という問題が発生します。 switchToを使用して2番目または3番目のフレームを選択することもできません。

iframeのすべてのタグ名を含むリストを作成しようとしました。私は1つだけの結果を返します。再び、私はここで3を見る。そして、私が最初のものを選んだとしても、従来の手段を使ってフレーム内の要素を見ることはできません。

私はここで何が欠けていますか?

また、プライバシーに関する懸念から、私は経路のためにxを入れました。

org.openqa.selenium.NoSuchFrameException: Unable to locate frame: 1 
Command duration or timeout: 62 milliseconds 
Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:03:33' 
System info: host: 'DESKTOP-1PV0EPA', ip: '192.168.0.11', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_77' 
Driver info: org.openqa.selenium.firefox.FirefoxDriver 
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=46.0.1, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] 

答えて

0

あなたは、XPathロケータを使用して、部分的srcリンクでフレームを識別することができます:

void switchToIframe(int catalogId) 
{ 
    driver.switchTo().defaultContent(); // don't get trapped in iframes 
    driver.switchTo().frame(
     driver.findElement(
      By.xpath("//iframe[contains(@src, 'catalog/" + catalogId + "')]")); 
} 

は、それを使用する。ここ

は、私が0以外の別の指標を選択した場合、何が起こるかのキャプチャですlike:

switchToIframe(40); // frame 1 
switchToIframe(36); // frame 2 
switchToIframe(46); // frame 3 

また、フレームが読み込まれるまで待つ必要がありますem

+0

私はこれを試してみましたが、このような要素の例外はありません。 –

0

私は、XPathでWebElementsとしてiframeを解決しようと提案します。テストケースのスタブの下のコードスニペットでは、各iframeへのxpathを特定し、その中の文字列を埋め込む必要がありますが、これは近いと思われます。ページの内容を変更することが予想される場合

private static final By FRAME_PATH_1 = By.xpath(""); 
    private static final By FRAME_PATH_2 = By.xpath(""); 
    private static final By FRAME_PATH_3 = By.xpath(""); 

    private void traverseFrames(WebDriver driver) { 
     WebDriverWait wait = new WebDriverWait(driver, 10); 

     WebElement frame1 = wait.until(ExpectedConditions.presenceOfElementLocated(FRAME_PATH_1)); 
     WebElement frame2 = wait.until(ExpectedConditions.presenceOfElementLocated(FRAME_PATH_2)); 
     WebElement frame3 = wait.until(ExpectedConditions.presenceOfElementLocated(FRAME_PATH_3)); 

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frame1)); 
     System.out.println("in Frame 1"); 

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frame2)); 
     System.out.println("in Frame 2"); 

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frame3)); 
     System.out.println("in Frame 3"); 

    } 

のXPathは、保守のために素晴らしいではありませんが、それはあなたが探しているものにあなたが近づくことがあります。 FirebugのFirepath拡張を使用してxpathを解決します。

幸運

関連する問題