我正在尝试通过Selenium和Java解析和操作一些数据(使用Firefox作为浏览器,使用Ubuntu作为操作系统)。
我想在<textarea>
中输入<iframe>
:
主要表格:
...
<a class="sendMessegeLink" onclick="open_iframe('...)" title="someText">
<img style="padding-left:5px; vertical-align:middle" src="..."/>
someText
</a>
...
<table id="open_iframe_overlay"><tr><td>
<div id="open_iframe_wrapper">
<div id="open_iframe_closeButton" onclick="close_iframe()">×</div>
<iframe id="open_iframe" scrolling="no"></iframe>
</div>
</td></tr></table>
...
I帧:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="he" lang="he">
<head>
<meta http-equiv="Content-Language" content="he" />
<meta name="description" content="someText1" />
<title>someText2</title>
...
<body>
<center>
<div id="pageBackground">
<div id="topBackground"></div>
<div id="formDiv">
<form name="myForm" method="post">
...
<div class="label" style="width:90px"> someText3 </div><div id="inputText"><input type="text" name="messegeTitle" maxlength="50" lang="he" value="someText4" /></div>
<div class="label" style="width:80px">someText5</div><div id="inputTextArea" style="text-align:right">
<textarea name="messegeBody" lang="he" style="height:82px; margin-bottom:5px"></textarea><br />
</div>
<div id="send">
<input type="button" value="someText6" onclick="this.disabled=true; this.title='... '; if (!submitThis('...','myForm','sendMessage')) {this.disabled=false; this.title=''; return false;}" /><br />
someText7
</div>
...
</form>
</div><!--formDiv-->
</div><!--pageBackground-->
</center>
<script language="JavaScript" type="text/javascript">document.myForm.messegeBody.focus();</script>
</body>
</html>
我的代码点击弹出iframe的按钮:
WebElement tmpElement = driver.findElement(By.cssSelector(".."));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", tmpElement);
super.waitForDriver(10);
我试过了:
WebDriver pop = driver.switchTo().window(driver.getWindowHandle());
和
WebDriver pop = driver.switchTo().frame(0);
但:
pop.findElement(By.cssSelector("#inputTextArea>textarea")).sendKeys("..");
都给我:
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":"#inputTextArea>textarea"}
答案 0 :(得分:4)
你需要先切换到iframe(避免使用索引,尝试通过id或xpath / css选择器找到它)
WebElement frame = driver.findElement(By.cssSelector("#open_iframe"));
driver.switchTo().frame(frame);
driver.findElement(By.cssSelector("#inputTextArea>textarea")).sendKeys("..");
// if you need switch out of iframe
// driver.switchTo().defaultContent();
答案 1 :(得分:1)
有一条名为“同源政策”的规则。您的iframe网址必须与您的父文档的内容相同 - 如果是这样,您可以访问它并读/写/执行任何操作(如果浏览器没有特定限制;对于这种情况,没有解决方案,对于某些情况原因)。
了解详情