我想在Body中选择 Iframe 并输入值。我正在尝试使用以下代码。
HTML code:
<iFrame id="4564654_content_ifr">
<html>
<head>
<body id="tiny">
<div aria-lable="New Compose body">
<br>
</div>
</body>
</head>
</html>
</iFrame>
Selenium代码:
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@id,'content_ifr')]")));
driver.findElement(By.xpath("//*[@id='tiny']/div[1]")).sendKeys("Happy New IFrame");
但我无法输入数值。
有人可以帮我吗?
答案 0 :(得分:3)
您可以直接设置innerHTML
,而不是发送密钥。
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@id,'content_ifr')]")));
WebElement body = driver.findElement(By.cssSelector("body"));
(JavascriptExecutor)driver.executeScript("arguments[0].innerHTML = 'Happy New IFrame'", body);
如果您正在测试某些WYSIWYG编辑器,如TinyMCE,请随时查看这篇文章:
Test WYSIWYG editors using Selenium WebDriver
然后您可以直接通过编辑器API设置内容。众所周知,Firefox中存在sendKeys
的问题,但Chrome或PhantomJS应该没问题。
答案 1 :(得分:0)
请尝试以下五月帮助您。
WebElement sg= driver.findElement(By.xpath("//iframe[@id='4564654_content_ifr']"));
driver.switchTo().frame(sg);
答案 2 :(得分:0)
List<WebElement> iframeElements= driver.findElements(By.tagName("iframe"));
System.out.println("The total number of iframes are " + iframeElements.size());
driver.switchTo().frame(0);
Thread.sleep(3000);
System.out.println("it is on frame1");