2017-01-17 3 views
2

WebElement가 바로 다음 요소를 찾아 반환하는 메서드를 만들려고합니다. "following"또는 "following-sibling"을 사용하여 XPath를 사용하여 작동해야하는 많은 예제를 발견했지만 작동시키지 못합니다. 질문의 목적을 위해 여기에 html을 보여 드리 겠지만 요소 유형은 모든 유형의 요소 (a/ul/div/whatever)를 제공하는 일반 메소드를 원할 때 필요한 요소와 관련이 없습니다. 유형에 관계없이 형제 자매.Selenium WebDriver를 사용하여 주어진 요소의 다음 형제 찾기

<a id="blah" href="#" class="stuff">"My Label"</a> 
<ul class="some-class"> 
    <li>...</li> 
    <li>...</li> 
</ul> 

내 버그 디버깅 코드 :

IWebElement element = driver.FindElement(By.Id("blah")); 
IWebElement nextElement = element.FindElement(By.XPath("//following-sibling::ul[@class='some-class']")); 

나는 나의 XPath는 구문이 잘못 생각 ... 그리고 솔직히 단서입니다. "//"는 요소 나 DOM 자체와 관련이 있습니까? 다음 요소의 태그가 무엇인지 모른 채이를 수행하는 방법이 있습니까? 어떤 유형인지에 관계없이 다음 요소를 얻고 싶습니다. 이 작업을 수행하는 가장 단순하고 가장 일반적인 방법을 찾고 싶습니다. 내가하고 싶은 : 그 상대 경로이기 때문에 이미 XPath는에 .//으로 시도 element.nextSibling()

답변

3

와 자바 스크립트에서 할 수 정확히 무엇

public IWebElement NextSibling(IWebElement element) 
{ 
    IWebElement nextSibling = element.FindElement(By.?("magical string to find next sibling")); 
    return nextSibling; 
} 

을 ... 당신은 절대 경로를 사용하고 그래서 예상대로 작동하지 않습니다.

+0

고맙습니다! 나는 보통 xpath를 사용하지 않는다. 이것은 문제의 첫 번째 부분을 지나치게합니다. – jibbs

+0

실패한 경우에도 솔루션을 게시하여 문제를 해결하도록 도와주십시오. :) – acikojevic

2

xpath에서 이중 슬래시는 필요하지 않습니다. 실제로는 현재 컨텍스트의 어느 쪽 이던지 (원하는 것은 아닙니다). 당신은 아무것도 즉

following-sibling::ul[@class='some-class'] 
1

최선을 다하고 없다하여 현재 컨텍스트를 지정할 수 있습니다, 그리고 아마도 단지, 내가 볼 솔루션은 내가 내 질문의 끝 부분에 언급 한 바와 같이 단지 자바 스크립트 (element.nextSibling;)를 사용하는 것입니다. 다시 https://stackoverflow.com/a/11320472/2246511

, 나는 그것이 어떤 종류의 같은 형제 나 클래스 또는 아무것도에 대해 아무것도 제공해야하고 싶지 않은 : 나는 심지어 내가이 찾을 때까지 내가 IWebElement을 반환 IJavaScriptExecutor를 사용할 수 있다고 생각하지 않습니다. js nextSibling은 내가 원하는 것입니다.

+0

이것은 탁월한 접근 방식이며 잘 작동했습니다. –

관련 문제