2011-11-04 5 views
1

나는 Selenium 2.0 WebDriver에서 사용자 정의 FindElement 루틴을 작성하는 방법을 알아 내려고하고있다. 아이디어는 다음과 같을 것입니다.Selenium에서 사용자 정의 FindElement 루틴을 작성하는 방법은 무엇입니까?

driver.FindElement(By.Method((ISearchContext) => { 
    /* examine search context logic here... */ })); 

익명 메소드는 ISearchContext를 검사하고 일치하면 True를 반환합니다. 그렇지 않으면 거짓.

저는 셀렌 코드를 파헤 치며 조금 잃어 버렸습니다. 실제 By. * 논리가 클라이언트 측이 아니라 서버 측에서 수행되는 것처럼 보입니다. 그건 문제를 복잡하게 만드는 것 같습니다.

제안 사항?

+0

[게시물에 서명 또는 태그 라인을 추가하지 마십시오.] (http://stackoverflow.com/faq#signatures). – meagar

답변

0

좋아, 내가이 작업을 수행하는 방법을 알아 냈 당신이 아이디, cssselector, XPath는, 태그 이름, 클래스 이름을 원하는대로 당신은 많은 다른 유형을 추가 할 수 있습니다 내 시도 캐치 방법입니다 . 나는 driver.ExecuteScript()를 이용하여 webdriver에서 custom js를 실행한다. 다음과 같이 보입니다.

function elementFound(elem) { 
    var nodeType = navigator.appName == ""Microsoft Internet 
Explorer"" ? document.ELEMENT_NODE : Node.ELEMENT_NODE; 
    if(elem.nodeType == nodeType) 
    { 
     /* Element identification logic here */ 
    } 
    else { return false; } 
} 

function traverseElement(elem) { 
    if (elementFound(elem) == true) { 
     return elem; 
    } 
    else { 
     for (var i = 0; i < elem.childNodes.length; i++) { 
      var ret = traverseElement(elem.childNodes[i]); 
      if(ret != null) { return ret; } 
     } 
    } 
} 

return traverseElement(document); 
0

나는 다단계 검색을 수행합니다. 나는 try catch를 수행하는 메소드를 가지고 있고 그 메소드를 가지고 그 엘리먼트를 얻는다. 이론적으로이 방법 대신에 시도 잡기를 할 수 있지만 내 설정 때문에이 방법이 더 좋습니다.

public bool CheckUntil(IWebDriver driver, string selectorType, string selectorInfo) 
{ 
    int Timer = 160; 
    bool itemFound = false; 

    for (int i = 0; i < Timer; i++) 
    if(itemFound) 
    { 
    i = 0 
    } 
    else 
    { 
    Thread.Sleep(500); 
    if(selectorType.ToLower() == "id" && TryCatch(driver, selectorType, selectorInfo)) 
    { 
    if(driver.FindElement(By.Id(selectorInfo).Displayed) 
    { 
     itemFound = true; 
    } 
    } 
    else if(selectorType.ToLower() == "tagname" && TryCatch(driver, selectorType, selectorInfo)) 
    { 
    if(driver.FindElement(By.TagName(selectorInfo).Displayed) 
    { 
     itemFound = true; 
    } 
    } 
    } 

    return itemFound; 
} 

여기 등

public bool TryCatch(IWebDriver driver, string selectorType, string selectorInfo) 
{ 
    bool ElementFound = false; 

    try 
    { 
    switch(selectorType) 
    { 
    case "id": 
    driver.FindElement(By.Id(selectorInfo); 
    break; 
    case "tagname": 
    driver.FindElement(By.TagName(selectorInfo); 
    break; 
    } 
    ElementFound = truel 
    } 
    catch 
    { 
    ElementFound = false; 
    } 
return ElementFound; 
} 
관련 문제