6

Ich werde verrückt, wirklich. Ich habe diesen Code:So implementieren Sie PhantomJS mit Selenium WebDriver mit Java

public class Creazione extends TestCase { 
    private PhantomJSDriver driver; 
    private String baseUrl; 
    private boolean acceptNextAlert = true; 
    private StringBuffer verificationErrors = new StringBuffer(); 

    @Before 
    public void setUp() throws Exception { 
     File file = new File("C:/Program Files/phantomjs-1.9.7-windows/phantomjs.exe"); 
     System.setProperty("phantomjs.binary.path", file.getAbsolutePath()); 
     driver = new PhantomJSDriver(); 
     baseUrl = "http://www.gts.fiorentina.test/"; 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
     driver.get(baseUrl + "/Account/Login.aspx?ReturnUrl=%2f"); 
     findDynamicElement(By.id("tbUserName_I"), 2000); 
     driver.findElement(By.id("tbUserName_I")).clear(); 
     driver.findElement(By.id("tbUserName_I")).sendKeys("rogai"); 
     driver.findElement(By.id("tbPassword_I")).clear(); 
     driver.findElement(By.id("tbPassword_I")).sendKeys("Fiorentina2014!"); 
     driver.findElement(By.id("btnLogin_CD")).click(); 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    } 

    @Test 
    public void testCreazione() throws Exception { 
     driver.get(baseUrl + "/SegreteriaSportiva/Calciatori.aspx"); 
     findDynamicElement(By.cssSelector("#ASPxButton1_CD > span"), 2000); 
     driver.findElement(By.cssSelector("#ASPxButton1_CD > span")).click(); 
     findDynamicElement(By.id("FrmEdit_TS_TipoPersonaId_FK_B-1"), 2000); 
     driver.findElement(By.id("FrmEdit_TS_TipoPersonaId_FK_B-1")).click(); 
     driver.findElement(By.id("FrmEdit_TS_TipoPersonaId_FK_DDD_L_LBI2T0")).click(); 
     driver.findElement(By.id("FrmEdit_Nome_I")).clear(); 
     driver.findElement(By.id("FrmEdit_Nome_I")).sendKeys("Prova"); 
     driver.findElement(By.id("FrmEdit_Cognome_I")).clear(); 
     driver.findElement(By.id("FrmEdit_Cognome_I")).sendKeys("Calciatore"); 
     driver.findElement(By.id("FrmEdit_TS_RuoloId_FK_B-1")).click(); 
     driver.findElement(By.id("FrmEdit_TS_RuoloId_FK_DDD_L_LBI3T0")).click(); 
     driver.findElement(By.id("FrmEdit_DataNascita_I")).clear(); 
     driver.findElement(By.id("FrmEdit_DataNascita_I")).sendKeys("01/01/2014"); 
     driver.findElement(By.id("FrmEdit_Cittadinanza_I")).clear(); 
     driver.findElement(By.id("FrmEdit_Cittadinanza_I")).sendKeys("italiana"); 
     driver.findElement(By.id("FrmEdit_LuogoNascita_I")).clear(); 
     driver.findElement(By.id("FrmEdit_LuogoNascita_I")).sendKeys("roma"); 
     driver.findElement(By.cssSelector("#BTN_Edit_CD > span")).click(); 
     driver.findElement(By.id("Grid_DXFREditorcol3_I")).click(); 
     driver.findElement(By.id("Grid_DXFREditorcol3_I")).sendKeys("Prova"); 
     assertEquals("Prova",driver.findElement(By.xpath("//tr[@id='Grid_DXDataRow0']/td[3]")).getText()); 
    } 
} 

Nach der Ausführung erhalte ich diese Fehler während der Laufzeit, finden Sie, dass trace ---

org.openqa.selenium.InvalidElementStateException: {"errorMessage":"Element is not currently interactable and may not be manipulated","request":{"headers":{"Accept-Encoding":"gzip,deflate","Connection":"Keep-Alive","Content-Length":"27","Content-Type":"application/json; charset=utf-8","Host":"localhost:20497","User-Agent":"Apache-HttpClient/4.3.2 (java 1.5)"},"httpVersion":"1.1","method":"POST","post":"{\"id\":\":wdc:1402393987914\"}","url":"/clear","urlParsed":{"anchor":"","query":"","file":"clear","directory":"/","path":"/clear","relative":"/clear","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/clear","queryKey":{},"chunks":["clear"]},"urlOriginal":"/session/e4b71580-f084-11e3-959e-273aa801dd81/element/%3Awdc%3A1402393987914/clear"}} 
Command duration or timeout: 215 milliseconds 
Build info: version: '2.42.1', revision: '68b415a', time: '2014-05-29 16:17:18' 
System info: host: 'Silvio-Acer', ip: '10.10.1.122', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_55' 
Session ID: e4b71580-f084-11e3-959e-273aa801dd81 
Driver info: org.openqa.selenium.phantomjs.PhantomJSDriver 
Capabilities [{platform=XP, acceptSslCerts=false, javascriptEnabled=true, browserName=phantomjs, rotatable=false, driverVersion=1.1.0, locationContextEnabled=false, version=1.9.7, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=false, browserConnectionEnabled=false, webStorageEnabled=false, nativeEvents=true, proxy={proxyType=direct}, applicationCacheEnabled=false, driverName=ghostdriver, takesScreenshot=true}] 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204) 
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:600) 
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268) 
    at org.openqa.selenium.remote.RemoteWebElement.clear(RemoteWebElement.java:113) 
    at com.example.tests.Creazione.testCreazione(Creazione.java:59) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at junit.framework.TestCase.runTest(TestCase.java:176) 
    at junit.framework.TestCase.runBare(TestCase.java:141) 
    at junit.framework.TestResult$1.protect(TestResult.java:122) 
    at junit.framework.TestResult.runProtected(TestResult.java:142) 
    at junit.framework.TestResult.run(TestResult.java:125) 
    at junit.framework.TestCase.run(TestCase.java:129) 
    at junit.framework.TestSuite.runTest(TestSuite.java:255) 
    at junit.framework.TestSuite.run(TestSuite.java:250) 
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: org.openqa.selenium.remote.ScreenshotException: Screen shot has been taken 
Build info: version: '2.42.1', revision: '68b415a', time: '2014-05-29 16:17:18' 
System info: host: 'Silvio-Acer', ip: '10.10.1.122', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_55' 
Driver info: driver.version: RemoteWebDriver 
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:136) 
    ... 23 more 
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: {"errorMessage":"Element is not currently interactable and may not be manipulated","request":{"headers":{"Accept-Encoding":"gzip,deflate","Connection":"Keep-Alive","Content-Length":"27","Content-Type":"application/json; charset=utf-8","Host":"localhost:20497","User-Agent":"Apache-HttpClient/4.3.2 (java 1.5)"},"httpVersion":"1n.1","method":"POST","post":"{\"id\":\":wdc:1402393987914\"}","url":"/clear","urlParsed":{"anchor":"","query":"","file":"clear","directory":"/","path":"/clear","relative":"/clear","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/clear","queryKey":{},"chunks":["clear"]},"urlOriginal":"/session/e4b71580-f084-11e3-959e-273aa801dd81/element/%3Awdc%3A1402393987914/clear"}} 
Build info: version: '2.42.1', revision: '68b415a', time: '2014-05-29 16:17:18' 
System info: host: 'Silvio-Acer', ip: '10.10.1.122', os.name: 'Windows 7', os.arch: 'x86',  os.version: '6.1', java.version: '1.7.0_55' 
    Driver info: driver.version: unknow 

ich die phantomjs.exe in den Windows-Pfad hinzugefügt haben, hinzugefügt als externe Bibliothek der ghostdriver.jar, aber nichts ...

es ist wie zwei Tage, dass ich versuche, es funktioniert ...

+0

Funktioniert es in einem anderen Browser? Gibt es eine Website oder HTML, die wir uns anschauen können? – SiKing

Antwort

25

die Sie interessieren, ist es für mich gearbeitet

DesiredCapabilities caps = new DesiredCapabilities(); 
caps.setJavascriptEnabled(true);     
caps.setCapability("takesScreenshot", true); 
caps.setCapability(
         PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, 
         "your custom path\\phantomjs.exe" 
        ); 
WebDriver driver = new PhantomJSDriver(caps); 

dann Rest von ihnen sind similar..and pls Ihre Beobachtung kommentieren, hat einen großen Tag :)

+0

Dieser funktioniert perfekt für mich .. – user2186465

3

ich mit Ihnen das gleiche Problem konfrontiert bin. Ich kann den gleichen Code mit FirefoxDriver verwenden, aber wenn ich ihn in PhantomJSDriver ändere, ist er zusammengebrochen.

Können Sie den FirefoxDriver anstelle von PhantomJSDriver ausprobieren? Einfach ändern driver = new FirefoxDriver()

Eigentlich, wenn ich den Beispielcode von Selenium ändern, ändern Sie das Firefox-Laufwerk zu phantonjs Treiber, es funktioniert gut. Keine Ahnung, was das Problem mit Phantomjs ist.

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.phantomjs.PhantomJSDriver; 
import org.openqa.selenium.support.ui.ExpectedCondition; 
import org.openqa.selenium.support.ui.WebDriverWait; 

public class Selenium2Example { 
    public static void main(String[] args) { 
     // Create a new instance of the Firefox driver 
     // Notice that the remainder of the code relies on the interface, 
     // not the implementation. 
     System.setProperty("phantomjs.binary.path", System.getProperty("user.dir")+"/phantomjs"); 
     WebDriver driver = new PhantomJSDriver(); 
     // And now use this to visit Google 
     driver.get("http://www.google.com"); 
     // Alternatively the same thing can be done like this 
     // driver.navigate().to("http://www.google.com"); 

     // Find the text input element by its name 
     WebElement element = driver.findElement(By.name("q")); 

     // Enter something to search for 
     element.sendKeys("Cheese!"); 

     // Now submit the form. WebDriver will find the form for us from the element 
     element.submit(); 

     // Check the title of the page 
     System.out.println("Page title is: " + driver.getTitle()); 

     // Google's search is rendered dynamically with JavaScript. 
     // Wait for the page to load, timeout after 10 seconds 
     (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver d) { 
       return d.getTitle().toLowerCase().startsWith("cheese!"); 
      } 
     }); 

     // Should see: "cheese! - Google Search" 
     System.out.println("Page title is: " + driver.getTitle()); 

     //Close the browser 
     driver.quit(); 
    } 
} 
0

Laden Sie die neuesten Selen-Java-Bindungen - 2.45 herunter. Dann entfernen Sie die 2.44 (oder was auch immer Sie verwenden) aus Ihrer Bibliothek.

Dann sind die folgenden in Ihrem Code:

import org.openqa.selenium.phantomjs.PhantomJSDriver; 
import org.openqa.selenium.phantomjs.PhantomJSDriverService; 

public void setUp() throws Exception { 

DesiredCapabilities DesireCaps = new DesiredCapabilities(); 
DesireCaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C://phantomjs.exe"); 
WebDriver driver = new PhantomJSDriver(DesireCaps); 

HINWEIS * Die Lage der EXE-Datei kann nicht in Ihrem Laufwerk C, so dass Sie es genau darauf haben Sie speichern Phantom

Du solltest gut sein, danach zu gehen.

+0

Es sieht aus wie Sie Code fehlt haben. Formatierung wird helfen, dies zu zeigen. – CompanyDroneFromSector7G