[Selenium]当DOM结构里面有iFrame,iFrame里面是html,怎么send keys to 里面的body,怎么用Assert进行验证?
我在测试的过程中遇到一个这样的问题,我无法通过CssSelector找到iFrame下边的html:
1 2 3 4 5 6 7 8 9 10 11 12 | < 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里面去,用来之后再切换回来,此问题就解决了。
1 2 3 4 5 6 7 | 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才可以。
1 2 3 4 5 6 7 8 | 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(); } |
分类:
Selenium
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现