2017-12-30 83 views
-1

XPath를 사용하여 요소를 찾으려고합니다. Chrome에서는 완벽하게 작동하지만 Internet Explorer에서는 그렇지 않습니다.XPath가 IE에서 작동하지 않는 이유는 무엇입니까?

크롬에

, 그것을 잘 작동하지만, 내가 IE를 위해 그것을 실행하려고하면, 나는 스레드에서

예외 "주"org.openqa.selenium.NoSuchElementException 말한다 다음과 같은 오류가 무엇입니까 : 할 수 없음을 xpath == html/body/form/div [3]/div [2]/div/div [2]/a로 요소를 찾으십시오.

이 문제의 원인은 무엇일까요? 나는 이미 "보호 모드"설정 및 "확대/축소"기능과 같은 가장 일반적인 IE 오류를 수정했습니다.

+1

[ask], 특히 [mcve] (MCVE)에 관한 부분과 [연구 노력이 얼마나 필요합니까?] (https://meta.stackoverflow.com/questions)를 읽어보십시오./261592/how-much-research-effort-of-stack-overflow-users) 이것은 자신의 프로그램을 디버그하고 직접 문제를 해결하는 데 도움이됩니다. 그렇게하고 아직도 갇혀 있다면 MCVE를 게시하고, 시도한 내용과, 오류 메시지를 포함한 실행 결과를 게시하여 더 잘 도와 드릴 수 있습니다. 또한 해당 페이지 및/또는 관련 HTML에 대한 링크를 제공하십시오. – JeffC

+0

분명히 부서지기 쉬운 절대 xpath를 사용하려고합니다. 논리 xpath를 사용해보십시오. – DebanjanB

+0

한 브라우저에서 XPath가 작동한다고해서 다른 브라우저에서 작동한다는 보장은 없습니다. HTML 레이아웃이 두 ​​브라우저 사이에서 약간 변경되는지 확인해야합니다. –

답변

1

브라우저에 임베드 된 XPath 엔진은 각 브라우저 공급 업체가 자체적으로 구현하므로 실제로 구현에 차이가 있습니다. earier IE의 경우 6과 7은 XPath 엔진을 포함하지 않습니다. XPath 엔진을 포함하지 않는 브라우저에서 XPath를 사용하는 경우 셀레늄은 자체 XPath 라이브러리를 사용하여 XPath를 실행하고 Selenuim Xpath 라이브러리는 모든 XPath 기능을 구현하지 않으며 다른 브라우저의 Xpath 엔진과도 차이가 있습니다. 위로 문제에

, 당신은 HTML 노드가 HTML DOM 트리의 루트입니다

/html/body/form/div[3]/div[2]/div/div[2]/a 

때문에 당신이 당신의 XPath는 시작에게 머리 /을 넣어해야하므로, 그것이 있어야 시작 부분에 salsh을 놓친 루트 노드에서

또는 당신은 XPath는에 HTML을 생략 할 수 있습니다 : //body/form/div[3]/div[2]/div/div[2]/a

을 그것이 truthy HTML 노드가 브라우저의 모든 종류에 HTML DOM 트리의 루트이기 때문에.

1

xpath를 CSS로 변환하십시오. Xpath는 CSS-SELECTOR가 종종 같은 크로스 브라우저 인 브라우저마다 다를 수 있습니다. 따라서 크롬을 검사하는 것은 문제가되지 않습니다.

HTML> body> 형태> DIV : n 번째 자식 (3)> DIV : n 번째 자식 (2)> div> DIV : n 번째 자식 (2)>을

또한 XPath의 및 IE는 공지 그들의 문제. 당신이 XPath를 사용해야하는 경우, 당신은 시도 할 수 Finding an elements XPath using IE Developer tool

0

한 가지는로드 시간 요소의 검사 사이 즉 Thread.sleep() 증가 또한 파이어 폭스의 firebugfirepath 애드온을 사용하여 XPath를 얻고 읽기. 나를 제안하는 첫 번째 아이디어는 적어도 나를 위해 일합니다. 질문이있을 경우 알려주십시오