[Selenium]DOM構造の中にiFrameがあり、iFrameの中にhtmlがある場合、send keys toの中のbodyはどのようにAssertで検証しますか?
2048 ワード
テスト中にこのような問題に遭遇しました.CssSelectorでiFrameの下のhtmlを見つけることができませんでした.
その後iFrameしか見つからないことに気づき、その後は見つからなかった.私はsendKeys toでTextをbodyに送ることができたことがありますが、AssertでiFrameのtextを検証したいのですが、できません.
解決策:
まずdriverをiFrameに切り替えて、使ってから切り替えて、この問題は解決しました.
ローカルで上記のようにデバッグにパスした後、Jenkinsの上に置いてGridモードで実行したときにエラーが発生し、sendkeysは有効になりませんでした.
以下のようにして、switchToを繰り上げ、sendKeys to//html/bodyにすることができます.
<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();
}