首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能与iframe中的元素交互?

为什么我不能与iframe中的元素交互?
EN

Stack Overflow用户
提问于 2013-08-06 23:19:17
回答 2查看 2.4K关注 0票数 0

我试图通过Selenium和Java来解析和操作一些数据(使用Firefox作为浏览器,使用Ubuntu作为操作系统)。

我想在一个<textarea>中键入<iframe>

主表单:

代码语言:javascript
复制
...
<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()">&times;</div>
        <iframe id="open_iframe" scrolling="no"></iframe>
    </div>
    </td></tr></table>
...

Iframe:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
WebElement tmpElement = driver.findElement(By.cssSelector(".."));
JavascriptExecutor executor = (JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", tmpElement);
super.waitForDriver(10);

我试过:

代码语言:javascript
复制
WebDriver pop = driver.switchTo().window(driver.getWindowHandle()); 

以及:

代码语言:javascript
复制
WebDriver pop = driver.switchTo().frame(0);

但是:

代码语言:javascript
复制
pop.findElement(By.cssSelector("#inputTextArea>textarea")).sendKeys(".."); 

两者都给了我:

代码语言:javascript
复制
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":"#inputTextArea>textarea"}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-07 00:59:16

您需要首先切换到iframe (避免使用索引,尝试通过id或xpath/css选择器找到它)

代码语言:javascript
复制
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();
票数 4
EN

Stack Overflow用户

发布于 2013-08-06 23:25:50

有一条叫做“同一来源政策”的规则。您的iframe url必须以与父文档相同的内容开始--如果是的话,您可以访问它并读取/写/执行任何内容(如果浏览器没有具体的限制,那么就没有解决方案,因为某些原因)。

记住,http://www.somethi.nghttp://somethi.ng不一样!

policy阅读更多内容

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18092111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档