2013-05-07 4 views
0

HTML 코드를 포함하는 문자열 변수를 프레임 안에있는 텍스트 상자로 보내려고합니다.WebDriver의 SendKeys()를 사용하여 HTML 태그가있는 문자열을 보내면 브라우저가 임의의 페이지로 이동하게되는 이유는 무엇입니까?

driver.SwitchTo().Frame(driver.FindElement(By.Id("rte"))); 
driver.FindElement(By.XPath("/html/body")).SendKeys(myStringContainingHTML); 
: 내가 두 가지 일을 ... 는 첫째, I 프레임을 전환하고, 키를 보내 불을 지르고이 내게 준 X-경로를 사용하려고 시도

<iframe id="rte" class="rteIfm" frameborder="0" contenteditable="" title="Description"> 
<html> 
<head> 
</head> 
<body role="textbox" aria-multiline="true"> 
</body> 
</html> 
</iframe> 

: HTML 코드는 다음과 같습니다 같은 일이 일어난 두 경우 모두

driver.FindElement(By.Id("rte")).SendKeys(myStringContainingHTML); 

:

둘째, I 프레임과 같은 ID를 가진 요소에 키를 전송하려고 처음 문자열 (포함 된 HTML 코드) 시작 예상대로 텍스트 상자에 입력 할 수 있습니다. 그런 다음 약 하나의 태그가 입력 된 후 브라우저가 다른 페이지로 이동하기 시작했습니다. 나는 google에 가서 검색 창에 입력 한 다음 문자열에있는 HTML 코드 청크를 검색하기 시작했습니다.

나에게는 매우 이상하게 보입니다. 어디서 잘못 되었습니까? 일반적으로 간단

+0

안녕하세요 대니 - 텍스트에 HTML 코드가 포함되어 있지 않지만 다른 비정상적인 데이터가 포함되어있는 경우에도 동일한 문제가 발생합니까? 예를 들어 문자열이 일반 텍스트이지만 줄 바꿈이 있거나 문자열이 탭이있는 일반 텍스트 인 경우 여전히 발생합니까? –

+0

안녕하세요. 귀하의 제안에 감사드립니다. 문자열 변수를 일반 문자로 변경하려고 시도했지만 동일한 문제가 없었습니다. 나는 모든 \ t, \ r, \ n 기호를 HTML 코드에서 제거하려고 시도했지만 문제를 멈추지 않았습니다. 나는 그것이 HTML 코드에 관한 것인가? 난 수동으로 텍스트 상자에 입력했는데 문제가 없다, 붙여 넣기도 잘 작동합니다. HTML이 문자열 변수에 있고 SendKeys()를 사용하면 문제가 발생합니다. – Danny

답변

0

난 아직도 이런 일이 있지만 해결 방법 내가 WebDriver에서 SendKeys (그것을 프로그래밍 방식으로 클립 보드에 문자열을 복사하기 위해를 사용하여 과거거야 이유를 알고하지 않습니다)와 같은 :

Clipboard.SetText(myStringContainingHTML); 
driver.FindElement(By.Id("myTxtBoxId")).SendKeys(OpenQA.Selenium.Keys.LeftControl + "v"); 

class MyAsyncClass 
{ 

static IWebDriver driver; 

public static void MyAsyncMethod() 
{ 
FirefoxProfile myProfile = new FirefoxProfile(); 
driver = new FirefoxDriver(myProfile); 
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(20)); 

STAClipBoard(myStringWithHtmlCode); 
driver.FindElement(By.Id("myTxtBoxId")).SendKeys(OpenQA.Selenium.Keys.LeftControl + "v"); 
} 

private static void STAClipBoard(string myStringWithHtmlCode) 
{ 
    ClipClass clipClass = new ClipClass(); 
    clipClass.myString = myString; 
    System.Threading.Thread t = new System.Threading.Thread(clipClass.CopyToClipBoard); 
     t.SetApartmentState(System.Threading.ApartmentState.STA); 
     t.Start(); 
     t.Join(); 
    } 


}//class 

public class ClipClass 
{ 
    public string myString; 

    public void CopyToClipBoard() 
    { 
     Clipboard.SetText(description); 
    } 
} 
:

"Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it." 

그래서 난 그냥 클립 보드에 그걸 얻기 위해이 해결해야했다 :

그러나 실제로 나는 멀티 스레딩 동안 그것을 시도하고 오류가 발생했습니다