6

Sto impazzendo, davvero. Ho questo codice:Come implementare PhantomJS con Selenium WebDriver usando 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()); 
    } 
} 

Dopo l'esecuzione ottengo questi errori in fase di runtime, che segue è quella traccia ---

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 

ho aggiunto il phantomjs.exe al percorso di Windows, aggiunto come esterno biblioteca ghostdriver.jar, ma niente ...

E 'come due giorni che sto cercando di farlo funzionare ...

+0

Funziona in un altro browser? C'è un sito web o HTML che potremmo guardare? – SiKing

risposta

25

Prova questa, ha funzionato per me

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); 

poi resto di loro sono pls similar..and gentilmente commentare la tua osservazione, hanno un grande giorno :)

+0

Questo funziona perfettamente per me .. – user2186465

3

sto affrontando lo stesso problema con te. Posso usare lo stesso codice con FirefoxDriver, ma quando lo cambio su PhantomJSDriver, si rompe.

Puoi provare FirefoxDriver invece di PhantomJSDriver? Basta cambiare driver = new FirefoxDriver()

In realtà se modifico il codice di esempio fornito da selenio, cambia l'unità di firefox in driver phantonjs, funziona benissimo. Non ho idea di quale sia il problema con phantomjs.

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

Scarica le più recenti legature java selenio - 2.45. Quindi rimuovi il 2.44 (o qualsiasi altra cosa tu stia utilizzando) dal tuo grimorio.

quindi includere il seguente nel codice:

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); 

NOTA * La posizione del file exe, non può essere nel vostro disco C, quindi si punta esattamente Hai negozio fantasma

Dovresti essere bravo ad andare dopo questo.

+0

Sembra che tu abbia del codice mancante. La formattazione aiuterà a mostrare questo. – CompanyDroneFromSector7G