Java/Eclipse/Selenium Page Factory测试提示找不到main方法的解决求助
解决Selenium测试类"找不到main方法"的问题
咱先搞明白为啥会出这个错:你用的是Selenium+Page Factory搭测试框架,这类测试根本不需要手动写main方法!它是靠TestNG或者JUnit这类测试框架来驱动执行的。如果你直接用Eclipse的「Run As > Java Application」运行,Eclipse会默认找main方法,自然就报错;就算硬塞个main方法进去,也不符合测试框架的执行逻辑,所以测试还是跑不起来。
下面给你两种解决方案,优先推荐第一种,是行业通用的做法:
一、用TestNG驱动测试(推荐)
这是正规测试框架的玩法,完全不需要main方法,步骤如下:
1. 给项目加TestNG依赖
如果是Maven项目,往pom.xml里加这段依赖:
<dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.8.0</version> <scope>test</scope> </dependency>
要是普通Java项目,右键项目 → 「Build Path」→「Add Libraries」→「TestNG」,跟着向导走完就行。另外别忘了在Eclipse里装TestNG插件,去Eclipse Marketplace搜TestNG安装就行。
2. 把测试类改成TestNG风格
给你写个Page Factory的示例,一看就懂:
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.PageFactory; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; // 先写个Page类,比如百度首页 class BaiduHomePage { WebDriver driver; public BaiduHomePage(WebDriver driver) { this.driver = driver; // 初始化PageFactory,把元素和页面绑定 PageFactory.initElements(driver, this); } // 这里可以定义页面元素和操作,比如@FindBy注解定位搜索框 } // 测试类 public class BaiduSearchTest { WebDriver driver; BaiduHomePage baiduPage; // 每个测试用例执行前初始化浏览器 @BeforeMethod public void setUp() { // 注意替换成你自己的ChromeDriver路径 System.setProperty("webdriver.chrome.driver", "D:/chromedriver.exe"); driver = new ChromeDriver(); driver.get("https://www.baidu.com"); baiduPage = PageFactory.initElements(driver, BaiduHomePage.class); } // 真正的测试用例,用@Test标记 @Test public void testSearchFunction() { // 这里写你的测试逻辑,比如调用Page类的方法输入关键词、点击搜索 System.out.println("正在执行百度搜索测试"); } // 每个测试用例执行后关闭浏览器 @AfterMethod public void tearDown() { if (driver != null) { driver.quit(); } } }
3. 正确运行测试
在Eclipse里右键测试类 → 「Run As」→「TestNG Test」,TestNG会自动帮你处理测试的启动、执行、收尾,完全不用管main方法。
二、非要用main方法运行(仅临时调试用)
如果只是临时调试代码,不想用测试框架,那可以手动在main里模拟测试流程:
public class BaiduSearchTest { public static void main(String[] args) { WebDriver driver = null; try { System.setProperty("webdriver.chrome.driver", "D:/chromedriver.exe"); driver = new ChromeDriver(); driver.get("https://www.baidu.com"); BaiduHomePage baiduPage = PageFactory.initElements(driver, BaiduHomePage.class); // 写你的测试逻辑 System.out.println("临时调试测试"); } catch (Exception e) { // 捕获异常打印日志 e.printStackTrace(); } finally { // 最后一定要关闭浏览器 if (driver != null) { driver.quit(); } } } }
不过这种方式没有测试框架的报告、断言管理、用例分组这些功能,只适合临时测代码,别用来写正式测试用例。
最后提醒几个坑
- ChromeDriver版本要和你的Chrome浏览器版本匹配,不然浏览器启动会失败
- Page类里一定要用
PageFactory.initElements(driver, this)初始化元素,不然定位不到 - 要是TestNG运行没反应,检查下插件是不是装对了,依赖有没有引入成功
内容的提问来源于stack exchange,提问作者Y_Sh
相关产品推荐
相关产品推荐

