任何人都可以告诉我如何识别并切换到没有标题和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元素。
答案 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。 你可以纠正这些或你的外部来源吗?如果可以,我会这样做。 然后尝试使用
运行Jscriptdriver.ExecuteScript("Your javascript here..");
放置代码以在脚本中设置div对象的值。我没有方便的样本,但使用适当的选择器
driver.querySelector("tag.className..").innerHTML = "Your Keys";
在使用chrome中的控制台玩这个时,我仍然遇到问题。但我强烈怀疑格式错误的HTML是你的罪魁祸首。如果你已经解决了这个问题,我很乐意看到答案。干杯!