我已经把头撞到墙上很长一段时间所以我想我会问“专家”为什么下面的代码不能用PhantomJS工作(输入密码)但用Firefox工作得很好。最令人不安的是,一个字段条目(用户名)成功,但第二个根本不起作用。该页面加载得很好,我已经包含了测试代码,以验证其他组件是否正常加载。
见下面的代码:
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();
}
}
答案 0 :(得分:8)
PhantomJS 1.x有元素ID问题。该网站已损坏,因为它使用password
页面上的两个元素,这些元素永远不会发生。只需用元素类型(input
)替换选择器中的id就可以解决它。
driver.findElement(By.cssSelector("#pintr > input")).sendKeys("1234");
答案 1 :(得分:1)
Try the methods from this link
根据我对WebDriver的经验,通常是时间问题。在代码开头调用上面链接中的方法,以便在尝试查找之前确保所有内容都已加载。或者你可以在找到元素之前使用Thread.Sleep足够长的时间。