Je deviens fou, vraiment. J'ai ce code:
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());
}
}
Après exécution, j'obtiens ces erreurs lors de l'exécution. La trace suivante ---
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
J'ai ajouté le phantomjs.exe au chemin Windows, en tant que bibliothèque externe ghostdriver.jar, mais rien ...
C'est comme deux jours que j'essaye de le faire fonctionner ...
Essayez ceci, cela a fonctionné pour moi
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);
alors le reste d'entre eux sont similaires..et pls aimablement commenter votre observation, passez une bonne journée :)
Je suis confronté au même problème avec vous. Je peux utiliser le même code avec FirefoxDriver, mais lorsque je le change en PhantomJSDriver, il tombe en panne.
Pouvez-vous essayer FirefoxDriver au lieu de PhantomJSDriver? Il suffit de changer driver = new FirefoxDriver()
En fait, si je modifie le code exemple fourni par Selenium, change le lecteur firefox en pilote phantonjs, cela fonctionne bien. Aucune idée de quel est le problème en utilisant 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();
}
}
Je rencontre le même problème lorsque j'utilisais la version 1.9.7 de Phantomjs. Je pense que cette version suivante a un problème. Veuillez utiliser la version 1.9.0 de phantomjs. Ceci est la version plus stable.
Voici le lien de téléchargement: https://code.google.com/p/phantomjs/downloads/detail?name=phantomjs-1.9.0-windows.Zip&can=4&q=
Téléchargez les plus récentes liaisons Selenium Java - 2.45. Ensuite, retirez le 2.44 (ou tout ce que vous utilisez) de votre bibliothèque.
Ensuite, incluez les éléments suivants dans votre 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);
REMARQUE * L'emplacement du fichier .exe n'étant peut-être pas dans votre lecteur C, vous devez donc l'indiquer exactement.
Vous devriez être bon pour aller après cela.