Ho sbattuto la testa contro il muro per un lungo periodo di tempo, quindi ho pensato di chiedere agli "esperti" perché il codice seguente non funzionasse (inserimento della password) con PhantomJS ma funziona bene con Firefox. La cosa più inquietante è che una voce di campo (username) ha successo, ma la seconda non funzionerebbe affatto. La pagina viene caricata correttamente e ho incluso il codice di test per verificare che gli altri componenti vengano caricati correttamente.WebDriver PhantomJS Impossibile trovare l'elemento, ma funziona perfettamente con Firefox
See codice qui sotto:
import java.io.File;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
public class login {
public static void main(String[] args) {
WebDriver driver;
Boolean verbose = false; //Change to true to test it with firefox
String phantomPath = "../phantomjs-1.9.8-linux-i686/bin/phantomjs";
String url = "https://www.britishairways.com/travel/redeem/execclub/_gf/en_us";
if (verbose) {
driver = new FirefoxDriver();
}
else{
File file = new File(phantomPath);
String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";
System.setProperty("phantomjs.binary.path", file.getAbsolutePath());
System.setProperty("phantomjs.page.settings.userAgent", userAgent);
driver = new PhantomJSDriver();
}
driver.get(url);
try{
driver.findElement(By.id("membershipNumber")).sendKeys("1234");
System.out.println("ID input successful");
if (driver.findElement(By.id("ecuserlogbutton")).isDisplayed()) {
System.out.println("Login Button is present");
}
//This is where it fails with PhantomJS but work with Firefox
driver.findElement(By.cssSelector("#pintr > #password")).sendKeys("1234");
System.out.println("password input successful");
}
catch (Exception e){
System.out.print(e.getMessage());
}
driver.close();
}
}
Potrebbe trattarsi di problemi di temporizzazione. Prova a utilizzare Thread.Sleep (2000) prima di trovareElemento e osservare il comportamento. Se funziona, allora sai che è un problema di temporizzazione. Inoltre c'è un metodo chiamato WaitForPagetoLoad. Puoi chiamarlo prima di inserire elementi. – neo
Bene, ho risolto il mio problema. Sembra che il selettore di CSS non funzioni con PhantomJS che ho usato da.xpath con .//*[@id='password '] e ora funziona. – ucipass
Grazie neo, in realtà l'ho provato anch'io eseguendo molto lentamente il debug del codice con eclissi. Ancora non sono sicuro del motivo per cui il selettore css non funziona. – ucipass