Node.js WebdriverJS/IO&;PhantomJS-带有属性选择器的单击处理程序不适用于PhantomJS

Node.js WebdriverJS/IO&;PhantomJS-带有属性选择器的单击处理程序不适用于PhantomJS,node.js,selenium-webdriver,phantomjs,ghostdriver,webdriver-io,Node.js,Selenium Webdriver,Phantomjs,Ghostdriver,Webdriver Io,我目前正在用WebDriverJ和PhantomJS编写一个应用程序测试套件。 为了确保我的测试工作正常,我首先通过Chrome运行它们,它们都可以正常工作。然而,当我把Chrome换成PhantomJS时,测试失败了 这个问题似乎概述了一个非常类似的问题,但所附的解决方案似乎没有帮助 下面是一个在Chrome上工作但不在PhantomJS上工作的粗略示例: var client = webdriverjs.remote({ desiredCapabilities: {

我目前正在用WebDriverJ和PhantomJS编写一个应用程序测试套件。 为了确保我的测试工作正常,我首先通过Chrome运行它们,它们都可以正常工作。然而,当我把Chrome换成PhantomJS时,测试失败了

这个问题似乎概述了一个非常类似的问题,但所附的解决方案似乎没有帮助

下面是一个在Chrome上工作但不在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);
    });
});
在PhantomJS上运行时,我显然会首先更改WebdriverJS选项:

var client = webdriverjs.remote({ 
    desiredCapabilities: {
        browserName: 'phantomjs',
        'phantomjs.binary.path': "path/to/phantomjs"
    }, 
    logLevel: 'silent' 
});
但当我运行测试并将日志级别设置为“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+选择器不能通过WebDriverJ在PhantomJS上工作?这是PhantomJS错误、WebdriverJS错误还是我在实现中犯的错误

所以至少对于google页面来说,这意味着WebdriverJS对userAgent字符串做了一些错误的处理。但这并不意味着它与您的原始页面的问题相同

像这样的事

默认的WebdriverJS用户代理值是正常的。问题(至少对于我测试的页面而言)来自一个大致如下的代码块:

if(navigator.onLine){ 
    renderPage()
} else doSomethingElse();
PhantomJS似乎总是将navigator.onLine设置为false

Doh

也就是说,我不明白为什么有人想在一个始终在线的产品中使用navigator.onLine价值。只有在别人的代码中才能找到的经典之一

痛苦的虫子


谢谢您的帮助。

不知道页面就无法回答。您是否尝试过将用户代理设置为,并将视口设置为类似桌面的,因为某些站点根据大小提供不同的标记。你是否通过截图或打印源代码来验证你是否在正确的页面上?我知道我在正确的页面上,因为一些基本测试通过了。我没有想到视口的事情,但这似乎没有什么不同。不过,我对“Chrome13”的用户代理有点困惑。我该如何应用它呢?也希望你不介意我将你对我的标题的编辑回滚。我想在这里提到WebdriverIO/JS,因为我不确定它是否导致了问题。顺便问一下,您是否尝试过增加日志级别?你确定没有任何错误吗?不知何故,我怀疑这是webdriver io问题。我已将日志级别设置为“verbose”,这会产生上面找到的错误消息。不确定该选项是否还有其他设置。难道你不认为你能自己重新制造这个问题吗?