2013-08-06 2 views
0

셀레늄과 자바 (Firefox를 브라우저로 사용하고 우분투를 OS로 사용)를 통해 일부 데이터를 구문 분석하고 조작하려고합니다.iframe 내의 요소와 상호 작용할 수없는 이유는 무엇입니까?

기본 양식 :

가 나는 <iframe><textarea>에 입력합니다

... 
<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이 : iframe에서 팝업 버튼을 클릭

<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> 

내 코드 :

,363,210
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"} 

답변

4

에서 더 읽기

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(); 
(인덱스를 사용하지 않는, ID 또는 XPath는/CSS를 선택하여 찾을 시도)
1

"동일한 출처 정책"이라는 규칙이 있습니다. iframe url은 부모 문서와 동일한 것으로 시작해야합니다. 그렇다면 브라우저에 특정 제한이없는 경우 해당 페이지에 액세스하여 읽기/쓰기/실행을 할 수 있습니다 (이 경우 특정 솔루션이 없음). 원인).

http://www.somethi.nghttp://somethi.ng과 같지 않습니다.

http://en.wikipedia.org/wiki/Same_origin_policy 먼저 iframe이로 전환해야

관련 문제