java - selenium RemoteWebDriver firefox 产生 NullPointerException

标签 java firefox selenium junit selenium-rc

我有一个专用的测试服务器,它运行 selenium 独立服务器,没有指定角色。我在该服务器上运行了 Xvfb 和 Firefox。

我的junit测试可以成功连接并创建驱动程序对象,如下所示:

   @Before
   public void setUp() throws Exception {
      DesiredCapabilities capabilities = DesiredCapabilities.firefox();

      driver = new RemoteWebDriver(new URL("http://192.168.132.102:4444/wd/hub/"), capabilities);
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
   }

一切正常,直到我从请求的 URL 中选择某些元素:

driver.get("http://www.google.com");   // works fine
logger.info(driver.getTitle());        // working fine also

但是,当我对(在调试 session 中)的结果(elem 引用)评估任何方法时:

RemoteWebElement elem = ((RemoteWebDriver)driver).findElementById("gbqfq");
elem.getLocation(); // exception
elem.getText();     // exception
elem.getSize();     // exception

我得到 NullPointerException 如下:

Session ID: bf2eeaa9-3abd-42d5-9210-8255712b9e63
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:595)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
    at org.openqa.selenium.remote.RemoteWebElement.getText(RemoteWebElement.java:152)
    at match.selenium.testcases.ExampleTest.test2(ExampleTest.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.lang.NullPointerException
    at org.openqa.selenium.remote.server.handler.GetElementText.call(GetElementText.java:29)
    at org.openqa.selenium.remote.server.handler.GetElementText.call(GetElementText.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:170)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

有什么办法可以克服这个问题吗?我尝试在本地计算机上将驱动程序设置为新的 FirefoxDriver 实例,但它按预期工作。不幸的是,我无法让它在远程网络驱动程序上工作。

注意:我尝试了大多数选择方法(byId、byClass、byTagname),但没有任何改变。

最佳答案

尝试使用以下方式查找元素: WebElement findElement(By by);

关于java - selenium RemoteWebDriver firefox 产生 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23892806/

相关文章:

java - 如何在流 API 中使用 system.out 重写计数循环

java - 动态谷歌地图/纬度经度vars/php/java/var/basic

firefox - 自动建议 chrome ://URLs in Firefox

java - 如何遍历图表?

javascript - 是否可以使 Firebug 控制台自动化?

database - 我应该在 Firefox 扩展中使用哪个轻量级数据库?

selenium - 我们如何在 Selenium 中自动执行 Flash 元素点击操作?

python - 即使通过 webdriver+python 设置浏览器首选项后也无法抑制操作系统下载文件窗口

python - 如何使用 Python 在 Selenium 中为给定的 HTML 构建 xpath

java.lang.NoClassDefFoundError : Could not initialize class org. mockito.internal.util.MockUtil