Selenium和Testng失败的页面对象模式
我在使用testng运行下面的页面对象模型时遇到问题 测试类1Selenium和Testng失败的页面对象模式,selenium,webdriver,testng,pom.xml,Selenium,Webdriver,Testng,Pom.xml,我在使用testng运行下面的页面对象模型时遇到问题 测试类1 package Proj; public class signInPage { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe"); ChromeDriver driver = new
package Proj;
public class signInPage {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
public signInPage (WebDriver driver)
{
this.driver=driver;
}
WebDriver driver;
public signInPage()
{
driver.get("baseURL");
}
By Email_address = By.name("Username");
By Password = By.id("Password");
public WebElement Email_address ()
{
return driver.findElement(Email_address);
}
public WebElement Password ()
{
return driver.findElement(Password);
}
public WebElement button_id ()
{
return driver.findElement(button_id);
}
}
测试类2
package Proj;
public class MyDetailsPage {
public MyDetailsPage (WebDriver driver)
{
this.driver=driver;
}
WebDriver driver;
By My_Details=By.xpath(".//*[@id='masterForm']/div[5]/div/div[3]/div[3]/a/span");
By First_name = By.id("FirstName");
By Last_name= By.name("NameModel.LastName");
By button_id= By.id("stage_one_button");
public WebElement My_Details ()
{
return driver.findElement(My_Details);
}
public WebElement First_name ()
{
return driver.findElement(First_name);
}
public WebElement Last_name ()
{
return driver.findElement(Last_name);
}
}
测试数据页
package Proj;
public class testData {
public static void main (String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
}
public void testDetails (WebDriver driver)
{
this.driver=driver;
}
static WebDriver driver;
protected static String baseUrl;
protected static String Email_address;
protected static String Password;
protected String First_name;
protected String Last_name;
public void Data () {
baseUrl = "https://login.yahoo.com/";
driver = new ChromeDriver();
Email_address = "myname@yahoo.com";
Password = "myname";
First_name = "Testing";
Last_name = "Account";
}
}
测试用例
package Proj;
import org.testng.annotations.Test;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite;
public class TestCases extends testData {
private static SearchContext WebElement;
@BeforeSuite
public void BeforeSuite () {
System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
WebDriver driver = new ChromeDriver ();
}
@BeforeClass
public void driver(WebDriver driver) throws InterruptedException
{
this.driver = driver;
driver.get(baseUrl);
}
@Test
public void AllTest () throws InterruptedException {
signInPage a = new signInPage (driver);
a.Email_address().sendKeys(Email_address);
a.Password().sendKeys(Password);
a.SIGN_IN().click();
MyDetailsPage e = new MyDetailsPage (driver);
e.My_Details ().click();
e.First_name ().sendKeys("Testing");
e.Last_name (). sendKeys ("Account");
e.button_id ().click();
}
}
它打开浏览器,但无法输入baseUrl,无法执行测试。它在TestCases类中失败。无论我如何尝试重新配置,都没有运气。我感谢你的及时帮助。多谢各位
FAILED CONFIGURATION: @BeforeClass driver
org.testng.TestNGException:
Can inject only one of <ITestContext, XmlTest> into a BeforeClass annotated driver.
For more information on native dependency injection please refer to http://testng.org/doc/documentation-main.html#native-dependency-injection
at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
at org.testng.internal.Parameters.createParameters(Parameters.java:172)
at org.testng.internal.Parameters.createParameters(Parameters.java:458)
at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:206)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
SKIPPED: AllTest
org.testng.TestNGException:
Can inject only one of <ITestContext, XmlTest> into a BeforeClass annotated driver.
For more information on native dependency injection please refer to http://testng.org/doc/documentation-main.html#native-dependency-injection
at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
at org.testng.internal.Parameters.createParameters(Parameters.java:172)
at org.testng.internal.Parameters.createParameters(Parameters.java:458)
at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:206)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 0
===============================================
配置失败:@BeforeClass驱动程序
org.testng.TestNGException:
只能将其中一个注入到带BeforeClass注释的驱动程序中。
有关本机依赖项注入的更多信息,请参阅http://testng.org/doc/documentation-main.html#native-依赖注入
位于org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
位于org.testng.internal.Parameters.createParameters(Parameters.java:172)
位于org.testng.internal.Parameters.createParameters(Parameters.java:458)
位于org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:206)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:146)
位于org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
位于org.testng.TestRunner.privateRun(TestRunner.java:744)
位于org.testng.TestRunner.run(TestRunner.java:602)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
在org.testng.SuiteRunner.runsequential上(SuiteRunner.java:375)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
运行(SuiteRunner.java:289)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
在org.testng.testng.runSuitesSequentially上(testng.java:1301)
位于org.testng.testng.runSuitesLocally(testng.java:1226)
位于org.testng.testng.runSuites(testng.java:1144)
位于org.testng.testng.run(testng.java:1115)
位于org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
跳过:AllTest
org.testng.TestNGException:
只能将其中一个注入到带BeforeClass注释的驱动程序中。
有关本机依赖项注入的更多信息,请参阅http://testng.org/doc/documentation-main.html#native-依赖注入
位于org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
位于org.testng.internal.Parameters.createParameters(Parameters.java:172)
位于org.testng.internal.Parameters.createParameters(Parameters.java:458)
位于org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:206)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:146)
位于org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
位于org.testng.TestRunner.privateRun(TestRunner.java:744)
位于org.testng.TestRunner.run(TestRunner.java:602)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
在org.testng.SuiteRunner.runsequential上(SuiteRunner.java:375)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
运行(SuiteRunner.java:289)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
在org.testng.testng.runSuitesSequentially上(testng.java:1301)
位于org.testng.testng.runSuitesLocally(testng.java:1226)
位于org.testng.testng.runSuites(testng.java:1144)
位于org.testng.testng.run(testng.java:1115)
位于org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
===============================================
默认测试
测试运行:1,失败:0,跳过:1
配置失败:1,跳过:0
===============================================
===============================================
默认套件
运行的测试总数:1,失败:0,跳过:1
配置失败:1,跳过:0
===============================================
公共无效驱动程序(WebDriver驱动程序)
不允许在@BeforeClass
方法上使用。您必须删除该参数,并找到另一种方法来设置驱动程序,正如juherr指出的那样,您不能通过传递webdriver以这种方式参数化@BeforeClass,相反,您可以按照以下方法进行设置:
public class TestCases extends testData {
private static SearchContext WebElement;
WebDriver driver;
@BeforeSuite
public void BeforeSuite () throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "C:\\Eclipse\\Selenium\\chromedriver.exe");
}
@BeforeClass
public void driver() throws InterruptedException
{
driver = new ChromeDriver ();
testData td = new testData ();
driver.get(td.baseUrl);
}
/
/
/
/
我已经按照建议做了,并且得到了这个错误-配置失败:@BeforeClass驱动程序java.lang.NullPointerException:entry中的null值:url=null您需要将baseURL值定义为baseURL=”https://login.yahoo.com/";
在您的TestCases classI中,我已经在我的TestData页面中定义了URL。我按照您的建议,在TestCases中定义了URL。它打开了Web,但没有执行操作。是的,但在TestCases类中无法访问,您必须为BaseURL提供一种可访问的方法。我已经这样做了,但它仍然没有执行操作。我已经在public void driver(WebDriver driver)中删除了(WebDriver)但仍然会遇到相同的问题-浏览器打开但未执行任何操作。