1

현재 WebdriverJS 및 PhantomJS를 사용하여 응용 프로그램 테스트 제품군을 작성하고 있습니다. 테스트가 제대로 작동하는지 확인하기 위해 먼저 Chrome을 통해 실행하고 정상적으로 작동합니다. 그러나 PhantomJS 용 Chrome을 교체하면 테스트가 중단됩니다.WebdriverJS/IO & PhantomJS - 특성 선택기가있는 클릭 핸들러가 PhantomJS에서 작동하지 않습니다.

이 질문 (WebDriver PhantomJS Unable to find element, but works fine with Firefox)은 매우 유사한 문제를 개괄하고 있지만 해결 된 솔루션은 도움이되지 않습니다. 여기

는 PhantomJS에 크롬에서 작동 가지의 유형의 거친 예,하지만하지 : PhantomJS에서 실행하면

var client = webdriverjs.remote({ 
    desiredCapabilities: { 
     browserName: 'chrome'  
    }, 
    logLevel: 'silent' 
}); 

client.waitForExist("[data-id='1568911']", function(e){ 
    client.click("[data-id='1568911']", function(e){ 
     assert(!e, "Should click on a specific element:" + element); 
    }); 
}); 

, 내가 분명히 먼저 WebdriverJS 옵션을 변경 :

var client = webdriverjs.remote({ 
    desiredCapabilities: { 
     browserName: 'phantomjs', 
     'phantomjs.binary.path': "path/to/phantomjs" 
    }, 
    logLevel: 'silent' 
}); 

하지만 테스트를 실행하고 logLevel을 'verbose'로 설정하면 아래와 같은 오류 메시지가 표시됩니다.

[12:43:34]: COMMAND POST  "/wd/hub/session/eb2b0a4b-e659-4607-bec0-82209bd6539a/element" 
[12:43:34]: DATA  {"using":"css selector","value":"[data-id='1568911']"} 
[12:43:35]: ERROR UnknownError An unknown server-side error occurred while processing the command. 
     {"errorMessage":"Unable to find element with css selector '[data-id='1568911']'","request":{"headers":{"Accept-Encoding":"gzip,deflate","Connection":"Keep-Alive","Content-Length":"54","Content-Type":"application/json; charset=utf-8","Host":"localhost:12784","User-Agent":"Apache-HttpClient/4.3.2 (java 1.5)"},"httpVersion":"1.1","method":"POST","post":"{\"using\":\"css selector\",\"value\":\"[data-id='1568911']\"}","url":"/element","urlParsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/2e1ff0a0-68d7-11e4-ad4c-3105ad572a89/element"}} 

"[data-id = '1568911']"또는 심지어 "#foo"와 같은 일반적인 CSS2 + 선택기가 WebdriverJS를 통해 PhantomJS에서 작동하지 않는 이유는 무엇입니까? PhantomJS 버그, WebdriverJS 버그 또는 구현시 실수 한 점입니까?

+0

페이지를 모른 채 대답하는 것은 불가능합니다. 일부 사이트에서 크기에 따라 다른 마크 업을 제공하기 때문에 사용자 에이전트를 [Chrome 13] (https://gist.github.com/artjomb/8a3f3a95900a3fe800bc)으로 설정하고 뷰포트를 데스크톱과 비슷한 것으로 설정해 보았습니다. 스크린 샷을 찍거나 소스 코드를 인쇄하여 올바른 페이지에 있는지 확인 했습니까? –

+0

기본 테스트의 일부가 통과하므로 정확한 페이지에 있음을 알고 있습니다. 뷰포트를 생각하지는 않았지만 차이가 발생하지 않은 것으로 보입니다. 나는 "Chrome 13"사용자 에이전트에 대해 다소 혼란 스럽다. 어떻게 적용합니까? – Charlie

+0

또한 내 제목을 편집하는 데 신경 쓰지 않기를 바랍니다. 문제의 원인인지 아닌지 확신 할 수 없어서 WebdriverIO/JS에 대한 언급을 계속하고 싶습니다. – Charlie

답변

1

적어도 Google 페이지의 경우 WebdriverJS가 userAgent 문자열에 이상이 있음을 의미합니다. 그렇다고해서 원래 페이지와 동일한 문제는 아닙니다. 그런

뭔가 ...

기본 WebdriverJS 사용자 에이전트 값은 괜찮습니다. 문제 (I가 테스트 된 페이지는, 적어도) 같은 약 보이는 코드 블록에서 온 :

if(navigator.onLine){ 
    renderPage() 
} else doSomethingElse(); 

PhantomJS 항상 false로 navigator.onLine를 설정 나타납니다 ...

https://github.com/ariya/phantomjs/issues/10647

도.

그건 그렇고, 왜 사람들이 왜 네비게이터를 사용하길 원하는지 이해할 수 없습니다. 항상 온라인에있는 제품의 온라인 가치. 다른 사람의 코드에서만 발견 할 수있는 고전 중 하나입니다 ...

고통스러운 버그.

도움 주셔서 감사합니다.

관련 문제