[Selenium]DOM構造の中にiFrameがあり、iFrameの中にhtmlがある場合、send keys toの中のbodyはどのようにAssertで検証しますか?

2048 ワード

テスト中にこのような問題に遭遇しました.CssSelectorでiFrameの下のhtmlを見つけることができませんでした.
<div id="mailEditorDiv" style="display: inline-block;">

<div class="maileditor">

<div style="height:130px;">

<div class="divBody">

<div class="ke-container ke-container-default" style="width: 620px;">

<div class="ke-toolbar" style="display:block;" unselectable="on">

<div class="ke-edit" style="display: block; height: 286px;">

<iframe class="ke-edit-iframe" frameborder="0" hidefocus="true" style="width: 100%; height: 286px;">

<html>

<head>

<body class="ke-content">rrrrrrrt</body>

</html>


その後iFrameしか見つからないことに気づき、その後は見つからなかった.私はsendKeys toでTextをbodyに送ることができたことがありますが、AssertでiFrameのtextを検証したいのですが、できません.
解決策:
まずdriverをiFrameに切り替えて、使ってから切り替えて、この問題は解決しました.
public void sendKeysToMailBodyEditBoxAndCheck(String mailBody){

		WebElement el = page.getMailBodyEditBox();

		el.sendKeys(mailBody);

		driver.switchTo().frame(el);

		Assert.assertEquals(driver.findElement(By.xpath("//html/body")).getText(), mailBody,"' "+mailBody+" ' should be displayed in mail body.");

		driver.switchTo().defaultContent();

	}


 
ローカルで上記のようにデバッグにパスした後、Jenkinsの上に置いてGridモードで実行したときにエラーが発生し、sendkeysは有効になりませんでした.
以下のようにして、switchToを繰り上げ、sendKeys to//html/bodyにすることができます.
public void sendKeysToMailBodyEditBoxAndCheck(String mailBody){

		WebElement el = page.getMailBodyEditBox();

		driver.switchTo().frame(el);

		WebElement mailTextEl = driver.findElement(By.xpath("//html/body"));

		mailTextEl.sendKeys(mailBody);

		Assert.assertEquals(mailTextEl.getText(), mailBody,"\""+mailBody+"\" should be displayed in mail body.");

		driver.switchTo().defaultContent();

	}