私は Thycidides/jbehave を使用していたテスト スイートを持っていて、正常に動作しました (ただし、開発が Sernity BDD に切り替えられたため、古いバージョンの FireFox に対して)。新しい Serenity BDD (まだ jbehave) に移行し、FireFox を更新しましたが、特定のページ/テストでフレームに切り替えようとすると、突然エラーが発生します。
私たちのサイトには多くのフレームがありますが、フレームの切り替えはすべてのページ/テストで機能し、単一のページ/テストを除きます (他の動作中のテストと同じフレーム構造を持っているようです)。特定のフレーム (そこにあることがわかっている) に切り替えようとすると、「要素は現在のフレームとは異なるフレームに属しています - そのフレームを含むフレームに切り替えて使用します」(および stale_element_reference へのリンク) (SerenityManagedException.これはあまり意味がありません。それが私がやろうとしていることです。切り替え先のフレームが存在することを確認するために、すべてのフレームを実行する代替コードをいくつか書きました。
「基本」フレーム構造:
<html>
<head>
</head>
<frameset cols="5,*" border="0" frameborder="no" framespacing="0">
<frameset rows="145,*" border="0" frameborder="no" framespacing="0">
<frame name="kalender" src="../calendar/Month.jsp" marginwidth="0" marginheight="0" noresize="" scrolling="no">
<frame name="dagskalender" src="../calendar/NewTimeReg.jsp" marginwidth="10" marginheight="20" noresize="" scrolling="no">
</frameset>
<frameset rows="50,*,1" border="0" frameborder="NO" framespacing="0">
<frameset cols="63,175,*,35" border="0" frameborder="NO" framespacing="0">
<frame name="dagbund" src="Mail.jsp" marginwidth="0" marginheight="0" noresize="" scrolling="NO">
<frame name="soeg" src="../search/main/Cont.jsp" marginwidth="0" marginheight="0" noresize="" scrolling="no">
<frame name="topbar" src="TopBarMid.jsp" marginwidth="0" marginheight="0" noresize="" scrolling="no">
<frame name="topbarende" src="TopBarRight.jsp" marginwidth="0" marginheight="0" noresize="" scrolling="no">
</frameset>
<frame name="main" src="../startpage/Fram.jsp?null" marginwidth="0" marginheight="0" noresize="">
<frameset cols="33%,33%,33%,*" border="0" frameborder="NO" framespacing="0">
<frame name="skjult" src="Blank.jsp" marginwidth="0" marginheight="0" noresize="" scrolling="no">
<frame name="skjult2" src="Blank2.jsp" marginwidth="0" marginheight="0" noresize="" scrolling="no">
<frame name="skjult3" src="Blank3.jsp" marginwidth="0" marginheight="0" noresize="" scrolling="no">
<frame name="AppletLoader" src="" marginwidth="0" marginheight="0" noresize="" scrolling="no">
</frameset>
</frameset>
</frameset>
</html>
「メイン」フレームに切り替えようとしているので、最初に defaultcontent に切り替えてから「メイン」に切り替えようとします
getDriver().switchTo().defaultContent();
String SAML = System.getProperty("login.user.saml").toString();
if(SAML.equalsIgnoreCase("false")) // some sites have a extra parent frame
{
staticlogger.info( "Switching to 'system' frame..." );
getDriver().switchTo().frame("system"); //disable step if SAML-login
}
staticlogger.info( "Switching to 'main' frame..." );
getDriver().switchTo().frame("main");
staticlogger.info( "「メイン」フレームに切り替えています..." ); 最後に実行されるため、getDriver().switchTo().frame("main"); で失敗します。
以下のコードは、「メイン」を見つけます。これは、アクティブ フレームに存在し、切り替え可能であることを意味します。これは、findElements がアクティブ フレームからのみ返されるためです。
List<WebElement> ele = getDriver().findElements(By.tagName("frame"));
for(WebElement el : ele)
{
staticlogger.info( "Frame: " + el.getAttribute("name") + " ID: " + el.getAttribute("id"));
if(el.getAttribute("name").equalsIgnoreCase("main"))
{
staticlogger.info( "Switching to 'main' frame..." );
getDriver().switchTo().frame(el);
}
}
このバグを解決するためのアイデアや回避策はありますか? 機密データ/コードが含まれているため、サイトの完全な HTML を投稿できません。