当帧没有id和title时,如何识别并切换到selenium webdriver中的帧

时间:2014-12-10 10:35:59

标签: c# selenium

任何人都可以告诉我如何识别并切换到没有标题和ID的iframe。 我需要进入这个框架,以便在此框架中找到另一个元素来发送一些文本。

<div class="sceditor-container" style="width: 1359px; height: 300px;">
  <div class="sceditor-toolbar">
  <iframe frameborder="0" src="javascript:false" style="width: 1349px; height: 261px;">
     <!DOCTYPE html>
     <html style="height:100%">
       <head>
             <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
             <link href="" type="text/css" rel="stylesheet">
       </head>
      <body contenteditable="true" style="height:88%">
        <div> </div>
      </body>
     </html>
 </iframe>

为此,我写了代码:

WebDriver.SwitchTo().Frame(WebDriver.FindElement(By.TagName("iframe")));
WebDriver.FindElement(By.XPath("html/body")).SendKeys("text");
WebDriver.SwitchTo().DefaultContent();

但是WebDriver无法找到iframe元素,因此无法将文本值发送到iframe元素。

2 个答案:

答案 0 :(得分:3)

要点击并发送密码,请使用以下代码

WebElement loc=driver.findElement(By.XPath("html/body"));
 Actions a= new Actions(driver);
 a.click(loc).sendKeys("emailBody").perform();

要在iframe元素中设置文本,您必须先从Body标签

复制文本
WebElement emailBody = driver.findElement(by.xpath("/html/body"));
emailBody.getText();

将文本复制到emailBody后,您可以将其与框架内的元素一起使用,如下所示

WebDriver.FindElement(By.XPath("html/body")).SendKeys(emailBody);

尝试下面的代码切换到框架,看看会发生什么

driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@src,'javascript:false')]")));

您也可以尝试使用其索引访问框架,尝试

driver.switchTo().frame(0);

答案 1 :(得分:0)

我使用了ChromeDriver一段时间,但最近改用了phantomjs,因为我遇到了ChromeDriver无法解释的问题。 phantomjs(如果我的研究是正确的)几乎完全通过Javascript(这比猜测事实更多的猜测)注入。那么,那有什么关系呢?我发现你可以针对你加载的页面的DOM运行自己的JS。所以我把你的源码放到https://github.com/passport/express-4.x-local-example/并尝试对它运行一些xpath然后它就抛出了。在使用正斜杠关闭元标记和链接标记之后,然后为开始对添加结束div标记,然后按预期评估我的xpath。 你可以纠正这些或你的外部来源吗?如果可以,我会这样做。 然后尝试使用

运行Jscript
driver.ExecuteScript("Your javascript here..");  

放置代码以在脚本中设置div对象的值。我没有方便的样本,但使用适当的选择器

driver.querySelector("tag.className..").innerHTML = "Your Keys";

在使用chrome中的控制台玩这个时,我仍然遇到问题。但我强烈怀疑格式错误的HTML是你的罪魁祸首。如果你已经解决了这个问题,我很乐意看到答案。干杯!