PhantomJS;使用Java单击一个元素

时间:2017-05-10 13:34:26

标签: javascript java selenium nullpointerexception

我正在尝试使用Java自动化使用selenium的测试用例。如PhantomJS; click an element中所述,使用PhantomJS无法单击。不是单击元素而是抛出NullPointerException。

不幸的是,我发现的答案只能解释Javascript中的解决方案。

有没有人找到Java解决方案?

谢谢和最好的问候

AcMuDD

1 个答案:

答案 0 :(得分:0)

为了更好地理解使用PhantomJS,我今天尝试了一个简单的Google搜索。这些是步骤:

  1. 打开Goog​​le(工作)
  2. 制作截图(用于验证页面已加载)(正常工作)
  3. 发送密钥"您好" (不工作)
  4. 这是我的代码:

        System.setProperty("phantomjs.binary.path", "webdriver/phantomjs.exe");
        WebDriver driver = new PhantomJSDriver();
    
        driver.get("http://google.com");
        Thread.sleep(20000);        
        File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileCopyUtils.copy(file, new File("C:/Users/username/Desktop/screenshot.jpg")); 
    
        Actions a = new Actions(driver);
    
        a.moveToElement(driver.findElement(By.xpath("//*[@id=\"lst-ib\"]"))).click().perform();
        a.sendKeys("Hello").perform();
    

    我试图点击文字字段并输入" Hello"。但是我只得到了错误(对不起,我得到了一个" NoSuchElementException",而不是" NullPointerException")

      

    org.openqa.selenium.NoSuchElementException:{" errorMessage":"无法找到带有xpath的元素   ' // [@ ID = \" LST-IB \"]'""请求" {"报头" {"接受编码":" gzip的,放气""连接":"保活"&# 34; Content-Length的":" 47""内容类型":"应用/ JSON;   字符集= UTF-8""主机":"本地主机:39266""用户代理":" Apache的HttpClient的/ 4.5。 1(Java / 1.8.0_66)"}," httpVersion":" 1.1","方法":" POST" "后":" {\"使用\":\"的xpath \" \"值\" :\" // [@ ID = \\" LST-IB \\"] \"}"" URL&#34 ;:" /元件"" urlParsed" {"锚":"""查询":& #34;""文件":"元件""目录":" /""路径& #34;:" /元件""相对于":" /元件""端口":"" "主机":"""密码":"""使用者":" #&34;," USERINFO":"""权威":"""协议&#34 ;: """源":" /元件"" queryKey":{},"大块":[ "元件"]}" urlOriginal":" /会话/ 1fae7fb0-3651-11e7-a707-9fe5bd25a173 /元件"}}   命令持续时间或超时:303毫秒有关文档   这个错误,请访问:   http://seleniumhq.org/exceptions/no_such_element.htmorg.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)     在   org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)     在   org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)     在   org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)     在   org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:500)     在org.openqa.selenium.By $ ByXPath.findElement(By.java:361)at at   org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)     在   testExamples.SeleniumPhantomJSHeadlessTest.init(SeleniumPhantomJSHeadlessTest.java:233)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:497)at   org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)     在   org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510)     在org.testng.internal.Invoker.invokeConfigurations(Invoker.java:211)     在org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)     在   org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:170)     在   org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:104)     在org.testng.TestRunner.privateRun(TestRunner.java:774)at   org.testng.TestRunner.run(TestRunner.java:624)at   org.testng.SuiteRunner.runTest(SuiteRunner.java:359)at   org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)at at   org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)at at   org.testng.SuiteRunner.run(SuiteRunner.java:261)at   org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)at   org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)at   org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)at at   org.testng.TestNG.runSuitesLocally(TestNG.java:1140)at at   org.testng.TestNG.run(TestNG.java:1048)at   org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)     at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)     在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)

         

    引起:org.openqa.selenium.remote.ScreenshotException:截屏已有   已被采用构建信息:版本:' 2.53.0',修订版:' 35ae25b',时间:   ' 2016-03-15 16:57:40'系统信息:主持人:'',ip:   '',os.name:' Windows 7',os.arch:' x86',os.version:   ' 6.1',java.version:' 1.8.0_66'驱动程序信息:driver.version:   RemoteWebDriver在   org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:138)     ......还有30多个

         

    引起:org.openqa.selenium.NoSuchElementException:   {" errorMessage":"无法找到带有xpath的元素   ' // [@ ID = \" LST-IB \"]'""请求" {"报头" {"接受编码":" gzip的,放气""连接":"保活"&# 34; Content-Length的":" 47""内容类型":"应用/ JSON;   字符集= UTF-8""主机":"本地主机:39266""用户代理":" Apache的HttpClient的/ 4.5。 1(Java / 1.8.0_66)"}," httpVersion":" 1.1","方法":" POST" "后":" {\"使用\":\"的xpath \" \"值\" :\" // [@ ID = \\" LST-IB \\"] \"}"" URL&#34 ;:" /元件"" urlParsed" {"锚":"""查询":& #34;""文件":"元件""目录":" /""路径& #34;:" /元件""相对于":" /元件""端口":"" "主机":"""密码":"""使用者":" #&34;," USERINFO":"""权威":"""协议&#34 ;: """源":" /元件"" queryKey":{},"大块":[ "元件"]}" urlOriginal":" /会话/ 1fae7fb0-3651-11e7-a707-9fe5bd25a173 /元件"}}   有关此错误的文档,请访问:   http://seleniumhq.org/exceptions/no_such_element.html

    更新12.05.2017:我在那里找到了一个解决方案:http://it-kosmopolit.de/blog/2014/02/25/quick-start-of-running-selenium-webdriver-against-phantomjs-in-java-on-windows-plain-java/

    使用findElementBy.name(" q")照顾WebElement对我有用。