ページのタブをクリックすると読み込まれる iframe があります。Firebug を使用して IE8 で iframe を確認すると、次の内容が表示されます。
iframe id=tabContextFrame class=contextFrame contentEditable=inherit src=/xyz.dt?forward=show&layouttype=NoHeader&runid=1234 name=tabContextFrame url=/xyz.dt?forward=show&layouttype=NoHeader&runid=1234 scrolling=auto
以上です。iframe の下の階層は表示されません。iframe 内のリンクをクリックしたいのですが、iframe 内の要素を見つけるために、 を実行してselenium.click("on the tab that loads the iframe")
から を実行しましたselenium.getHtmlSource()
。このソースから、少なくとも興味のあるリンクを見つけることができます。 を実行しましたselenium.click("//span[text()='Link']")
が、何も起こらないようです。何かアイデアはありますか?
コードは次のとおりです:
selenium.click("//span[text()='tab that loads iframe']");
Thread.sleep(5000);
selenium.selectFrame("tabContextFrame");
selenium.mouseOver("//span[text()='Link']");
selenium.mouseDown("//span[text()='Link']");
selenium.mouseUp("//span[text()='Link']");
Thread.sleep(5000);
selenium.selectFrame("null");
ベストアンサー1
Selenium 1.0 を使用していると思います。Selenium 2.0 と WebDriver をご覧になりましたか。次のものを見つけましたが、うまくいきました。
Q: contentEditable iframe に入力するにはどうすればいいですか? A: iframe の名前が「foo」であると仮定します。
driver.switchTo().frame("foo"); WebElement editable = driver.switchTo().activeElement(); editable.sendKeys("Your text here");
時々、これが機能しないことがあります。これは、iframe にコンテンツがないためです。Firefox では、「sendKeys」の前に以下を実行できます。
((JavascriptExecutor) driver).executeScript("document.body.innerHTML = '<br>'");
これは、iframe にはデフォルトでコンテンツがないため、つまりキーボード入力を送信するものがないため必要です。このメソッド呼び出しにより、空のタグが挿入され、すべてが適切に設定されます。
完了したら、必ずフレームから切り替えてください (以降のすべての操作はこの特定のフレームで行われるため)。
driver.switchTo().defaultContent();
私はこれを見つけましたhttp://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions