2012-09-20 2 views
1

내 페이지에 서식있는 텍스트 편집기가 있으며 거기에 일부 텍스트를 입력해야합니다. 나는 해결책을 썼지 만 그것은 간헐적으로 만 작용하는 것처럼 보인다. 다음은 이미 시도한 내용입니다.IFrame in webdriver. RTE 입력하기

 var iframe = _driver.SwitchTo().Frame(Driver.FindElement(By.XPath(xpath))); 
     var editor = iframe.FindElement(By.XPath("//*")); 
     for (var i = 1; _driver.FindElement(By.XPath("//*")).Text == String.Empty; i++) 
     { 
      switch (i) 
      { 
       case 1: 
        editor.SendKeys(text); 
        break; 
       case 2: 
        editor.SendKeys(Keys.Control + "a"); 
        editor.SendKeys(Keys.Delete); 
        editor.SendKeys(text); 
        break; 
       case 3: 
        editor.Click(); 
        editor.SendKeys(text); 
        break; 
       case 4: 
        throw new Exception("Rich Text Editor can't be reached"); 
      } 
      editor.SendKeys(text); 

루프가있는 경우 텍스트를 입력했는지 확인합니다. 그렇지 않으면 나는 다른 경우를 시도한다. 또한, 실행하려고하면 editor.Clear(); "요소를 지우려면 사용자가 편집 할 수 있어야합니다."라는 오류가 영구적으로 나타납니다. 입력 할 수는 있지만 (영구적으로) 지울 수는 없습니다. 그래서이 코드를 안정화시키는 방법이 궁금합니다.

+0

무작위로 던지는 유형 예외는 무엇입니까? 어떤 작업을 수행하기 전에 요소가 DOM에서 사용 가능한지 확인하십시오. 서식있는 텍스트 편집기에서 수동으로 내용을 지울 수 있습니까? – Santoshsarma

+1

그냥 조용히 타이핑하는 것이지 이것으로 인한 예외는 아닙니다. 양식은 완전히 상호 작용할 수 있습니다. –

답변

0

좋아, 해결책을 찾았습니다. 그것은 DOM을 통해 작동합니다. currentInstance는 집중된 텍스트 영역을 얻습니다.

editor.Click(); 
IJavaScriptExecutor js = (IJavaScriptExecutor) _driver; 
js.ExecuteScript("CKEDITOR.currentInstance.insertText('text')") 
+0

또한 window.frames [0]이 있지만 어떻게 든 저에게는 효과가 없었습니다. –