2012-09-17 2 views
1

HEJ 얘SVG 셀레늄

I하여 Google 시각화 API는 누적 막대 그래프를 그릴. 괜찮아요.하지만 이제는 셀렌으로 테스트하고 싶지만, Google 차트에서 요소를 찾는 데 어려움을 겪고 있습니다.

예를 들어 내가 차트 요소를 클릭하고 싶지만 매번 나는 예외를 얻을 XPath에 의해 요소를 찾으려고 "OpenQA.Selenium.NoSuchElementException을 : 요소를 찾을 수 없습니다"

내가 셀레늄 것을 읽기 그것의 까다로운 svg 이미지를 클릭하십시오.

해결책을 알고있는 사람이 있습니까? 나는 혼자서 적절한 해결책을 찾을 수 없습니다.

내 차트는 다음과 같습니다

http://i48.tinypic.com/21o4swx.png

내가 노력하고 무엇을 할 일입니다

 webdriver.Navigate().GoToUrl("http://localhost:59777/Tests/TestsMainView"); 
     IWebElement element = webdriver.FindElement(By.XPath("/html/body/div/div[2]/div[2]/iframe/html/body/div/svg/g[2]/g/g[2]/rect[5]")); 
     Actions myAction = new Actions(webdriver); 
     myAction.Click(element).Perform(); 
     Thread.Sleep(9999); 

감사합니다 :) 여기

답변

0

당신을 도울 수있는 몇 가지 조언입니다. 첫 번째 코드의 두 번째 라인은 당신은 "IWebElement"를했다

WebElement element = webdriver.FindElement(By.xpath("//img[contains(@src,'http://i48.tinypic.com/21o4swx.png')]")) 

해야입니다 (이 질문에 아마도 오타했다). 최상위 레벨에서 시작하여 작업하는 대신 요소가 일치하는 요소를 찾는 방식을 변경했습니다. 상호 작용하려는 요소의 범위를 좁히는 것이 더 나은 방법이므로 코드를 변경해도 즉시 테스트가 중단되지는 않습니다. 또한 "/"또는 "xpath ="셀레늄으로 xpath 표현식을 시작하지 않는 한 Webdriver는 경로를 변경하지 않은 경우에도 셀렉니언을 인식하지 못합니다. 셀레늄 Webdriver는이를 찾을 수 없습니다.

나는

element.click(); 

이것은 귀하의 링크에서 제공하는 차트를 확대 Webdriver 셀레늄이있을 것이다, 당신은 또한 라인 3-5을 제거하고 다음으로 대체 할 수 있습니다 후 뭘 하려는지 이해한다면 . 이게 도움이 되었기를 바랍니다.

0

나는 xpath가 svg 태그 안에서 아무 것도 선택할 수 없다는 것을 알았습니다. 대신 className 또는 tagName 선택자를 사용하여 요소를 찾거나 cssSelectors를 시도 할 수도 있지만 그 것에 대해서는 확실하지 않습니다. 당신은 여전히 ​​사용하여 SVG 내부 노드의 부모에 액세스하기 위해 XPath를 사용할 수 있습니다 : 도움이 될 것입니다

 By.xpath(".."); 

희망을.