我正在尝试使用Java自动化使用selenium的测试用例。如PhantomJS; click an element中所述,使用PhantomJS无法单击。不是单击元素而是抛出NullPointerException。
不幸的是,我发现的答案只能解释Javascript中的解决方案。
有没有人找到Java解决方案?
谢谢和最好的问候
AcMuDD
答案 0 :(得分:0)
为了更好地理解使用PhantomJS,我今天尝试了一个简单的Google搜索。这些是步骤:
这是我的代码:
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对我有用。