在Selenium WebDriver中使用此类时:
package Selenium3;
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Jobs {
static WebDriver driver;
public Jobs(WebDriver driver) {
this.driver = driver;
}
public static void con() throws InterruptedException {
List<WebElement> element = driver.findElements(By.cssSelector(".position_title.ng-binding"));
for (int i = 0; i < element.size(); i++) {
Thread.sleep(2000);
String u = element.get(i).getText();
if (u.contains("Java"));
System.out.println(u);
}
}
}
驱动程序始终为null。最后我想从我的Main类中调用这个方法。我做错了什么?
答案 0 :(得分:3)
你有一个static
方法(不需要类实例化)...所以当你在没有实例化类的情况下调用方法时,你不会初始化你的驱动程序:
您有各种解决方案:
使方法不是static
(您将强制使用构造函数初始化驱动程序,但您可以多次重用实例化的类)
public class Jobs {
private WebDriver driver;
public Jobs(WebDriver driver) {
this.driver = driver;
}
public void con() throws InterruptedException {
List<WebElement> element = driver.findElements(By.cssSelector(".position_title.ng-binding"));
for (int i = 0; i < element.size(); i++) {
Thread.sleep(2000);
String u = element.get(i).getText();
if (u.contains("Java"));
System.out.println(u);
}
}
保留方法static
添加驱动程序作为参数 (因此您将在调用方法之前使用驱动程序,并且您不需要实例化类)
public class Jobs {
public static void con(WebDriver driver) throws InterruptedException {
List<WebElement> element = driver.findElements(By.cssSelector(".position_title.ng-binding"));
for (int i = 0; i < element.size(); i++) {
Thread.sleep(2000);
String u = element.get(i).getText();
if (u.contains("Java"));
System.out.println(u);
}
}
在方法静态调用之前使用static
块初始化驱动程序(调用速度更快,但问题是您无法决定使用哪个驱动程序实现)
public class Jobs {
static WebDriver driver;
static {
this.driver = new FirefoxDriver(); // just an example
}
public static void con() throws InterruptedException {
List<WebElement> element = driver.findElements(By.cssSelector(".position_title.ng-binding"));
for (int i = 0; i < element.size(); i++) {
Thread.sleep(2000);
String u = element.get(i).getText();
if (u.contains("Java"));
System.out.println(u);
}
}