- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作基于 POM (PageFactory) 的 TestNG 框架,但我面临着将 WebDriver 实例传递到第二个 TestCase 文件的问题..
这是我的测试库(用于初始化浏览器和 log4j)
public class TestBase {
public static WebDriver driver;
public static FileInputStream fip;
public static Properties prop;
//public static Logger APP_LOGS=null;
//public static SoftAssert st=null;
public static boolean TestFail=false;
public static int temp=0;
public static final Logger APP_LOGS=Logger.getLogger(TestBase.class.getName());
public static WebDriver initialization() throws Throwable{
fip=new FileInputStream("./Files/or.properties");
prop=new Properties();
prop.load(fip);
//APP_LOGS.debug("properties file is loaded");
String browser=prop.getProperty("browsertype");
//System.out.println("5");
if(browser.equalsIgnoreCase("mozilla")){
System.setProperty("webdriver.gecko.driver", "./drivers/geckodriver.exe");
driver= new FirefoxDriver();
//APP_LOGS.debug("Mozilla fire fox browser started");
}
else if (browser.equalsIgnoreCase("ie")){
System.setProperty("webdriver.ie.driver", "./drivers/IEDriverServer.exe");
driver=new InternetExplorerDriver();
//APP_LOGS.debug("InternetExplorer browser started");
} else if(browser.equalsIgnoreCase("chrome")){
System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
driver=new ChromeDriver();
//APP_LOGS.debug("Chrome browser started");
}
driver.get(prop.getProperty("url"));
//driver.manage().window().maximize();
String log4jConfPath = "log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
APP_LOGS.info("Opened "+prop.getProperty("browsertype")+" browser");
APP_LOGS.info("Navigated to Seleniumeasy.com/test");
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
return driver;
}
上面的代码是我在测试页面中扩展的。即InputFormSubmitPage(如下)
public class InputFormSubmitPage extends TestBase{
WebDriver driver;
public InputFormSubmitPage(WebDriver driver) {
this.driver=driver;
PageFactory.initElements(driver, this);
}
//INPUTFORM SUBMIT -- Objects Locators
@FindBy(how=How.XPATH, using="//*[@id='treemenu']/li/ul/li[1]/a") WebElement inputformlink;
@FindBy(how=How.XPATH, using="//*[@id='treemenu']/li/ul/li[1]/ul/li[5]/a") WebElement inputFormSubmit;
@FindBy(how=How.CSS, using="[name='first_name'][placeholder='First Name']") WebElement firstName;
@FindBy(how=How.CSS, using="[name='last_name'][placeholder='Last Name']") WebElement lastName;
@FindBy(how=How.CSS, using="[name='email'][placeholder='E-Mail Address']") WebElement eMail;
@FindBy(how=How.CSS, using="[name='phone'][data-bv-field='phone']") WebElement phoneNumber;
@FindBy(how=How.CSS, using="[name='address'][placeholder='Address']") WebElement address;
@FindBy(how=How.CSS, using="[name='city'][placeholder='city']") WebElement city;
@FindBy(how=How.CSS, using=".form-control.selectpicker") WebElement state;
@FindBy(how=How.CSS, using="[name='zip'].form-control") WebElement zipCode;
@FindBy(how=How.CSS, using="[name='comment'][placeholder='Project Description']") WebElement projDescription;
@FindBy(how=How.CSS, using=".btn.btn-default") WebElement sendButton;
//@FindBy(how=How.CSS, using="div[class$='has-error']>div>small[data-bv-result='INVALID']") WebElement allFieldsValidationErrorMessages_Invalid;
//@FindBy(how=How.CSS, using="div[class$='has-error']>div>small[data-bv-result='VALID']") WebElement allFieldsValidationErrorMessages_Valid;
@FindBy(css="div[class$='has-error']>div>small[data-bv-result='INVALID']") public List<WebElement> allFieldsValidationErrorMessages_Invalid;
public void enterInputFormDetails()
{
inputformlink.click();
inputFormSubmit.click();
firstName.sendKeys("FirstName");
lastName.sendKeys("LastName");
eMail.sendKeys("eMail@email.com");
phoneNumber.sendKeys("9008001242");
address.sendKeys("1234, 1st street");
city.sendKeys("City");
//State Selector
Select oneState= new Select(state);
oneState.selectByIndex(3);
zipCode.sendKeys("12345");
projDescription.sendKeys("This is Project Description");
sendButton.click();
APP_LOGS.info("*****************InputFormSubmit Button is clicked*****************");
}
现在在我的测试用例中,即InputFormSubmitPageTest,我能够初始化WebDriver...但这就是问题..在我的下一个测试用例中..如果我通过同一行,即WebDriver driver=TestBase.initialization();浏览器是再次初始化..我只是想避免这种情况..但不确定如何执行我正在使用TestNG.xml来运行顺序执行
public class InputFormSubmitPageTest { //My First TestCase
@Test
public void validatingFieldsData() throws Throwable
{
WebDriver driver=TestBase.initialization(); // this is where i am starting browser
InputFormSubmitPage formSubmit=PageFactory.initElements(driver, InputFormSubmitPage.class);
formSubmit.inputFormLaunch();
formSubmit.inputFormSubmitInValidValidations();
formSubmit.enterInputFormDetails();
}
}
我的第二个测试用例,即 AjaxFormSubmitPageTest
public class AjaxFormSubmitPageTest { //My Send TestCase
@Test
public static void validatingFieldsData() throws Throwable
{
WebDriver driver=TestBase.initialization(); // this is where i am starting browser
AjaxFormSubmitPage formSubmit=PageFactory.initElements(driver, AjaxFormSubmitPage.class);
formSubmit.inputFormLaunch();
formSubmit.inputFormSubmitInValidValidations();
formSubmit.enterInputFormDetails();
}
}
我的 TestNG.xml 包含以下条目...
class name="testcases.InputFormSubmitPageTest"
class name="testcase.AjaxFormSubmitPageTest"
最佳答案
如何创建一个 @BeforeClass 并在那里进行驱动程序初始化。像这样的东西:
@BeforeClass
public static void before() {
WebDriver driver=TestBase.initialization();
}
这只会执行一次并进行初始化。
如果您只担心执行顺序,则必须进行 2 项更改: 1. 在 testng.xml 文件中,您必须添加:
测试名称=“测试”preserve-order=“true”这将确保testng.xml文件中提到的测试类的执行顺序。请点击此链接了解更多详细信息 http://www.seleniumeasy.com/testng-tutorials/preserve-order-in-testng
如果您想确保类中的优先顺序,您将必须执行以下操作:
@Test(priority=1) public void Test1() {}
@Test(priority=2) public void Test2() {}
@Test(priority=3) public void Test3() {}
优先级鼓励执行顺序,但不保证先前的优先级已经完成。 test3 可以在 test2 完成之前开始。如果需要保证,则声明依赖关系。
与声明依赖项的解决方案不同,即使一个测试失败,使用优先级的测试也会执行。这个依赖关系问题可以根据 http://testng.org/doc/documentation-main.html#annotations 使用 @Test(...alwaysRun = true...) 来解决
关于java - 如何使用 TestNG.XML 一对一地运行多个 PageFactory 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45163235/
我想多次运行一个测试用例。在testng.xml中可以配置吗?如果在测试方法中添加循环,则每次运行的结果将不会受到testng报告的影响。 最佳答案 您不能通过xml来执行此操作,但是可以在@Test
我在 TestNG 中尝试了一些使用硬断言和软断言的示例。虽然软断言按预期工作,但我遇到了硬断言的问题。 根据我从互联网上读到的信息-如果硬断言失败,它不会执行其他测试。 由于 ffPageEleme
我能够在 Eclipse 中完美地运行 testng。但是,我想使用命令行(Win 8)运行它,如不同论坛上所述。以下是我尝试处理错误的不同方法 - 1. java -cp "D:\testng\te
假设我有一个可以并行或串行执行的套件。但是,这样做的决定要留给运行时。启动此套件的常见方法如下: TestNG runner = new TestNG(); if (runInParallel())
如何获得执行TESTNG的方法所花费的时间? sample 测试: @Test(threadPoolSize = 100, invocationCount = 100) public void tes
我发现有一个选项可以通过surefire插件将参数设置为testng xml,然后可以从命令行发送参数。 [...] org.apache.maven.plug
我正在尝试使用这样的命令行运行 testng 测试: C:\Documents and Settings\Administrateur\Bureau\automatic tests testNG>ja
我正在尝试从我的套件文件中删除 testng 参数,因为它们在多个套件中都需要。例如,我有 2 个测试套件,upgrades.xml 和 features.xml。我创建了第三个文件,paramete
目标:并行独立运行 2 个类,其中每个测试将方法名称存储到一个变量中,该变量稍后可以在测试中访问。 问题:当测试并行运行时,它们开始在它们之间共享数据,从而破坏测试。 如果您看到控制台输出这是错误的:
好的,请引用 TestNG doc我可以运行测试 依次 (默认在测试套件中)或在 平行使用 . 现在这是我的 TestNG 配置
我正在尝试从命令行运行TestNG,但这给了我错误。 有人可以告诉我我要去哪里错吗? java -cp C:/TestNG目录/testng-6.2.jar;C:\project目录\src\com\
情况和问题 我有几个测试类,每个类都有几个测试方法。所有测试在后台使用相同的测试数据库。每个测试类初始化其数据库内容,然后在几个测试方法中测试内容。 当我单独运行每个测试时,它们都通过了。但是当我同时
如何让我的 TestNG 报告显示报告中控制台输出的链接?我以前见过 TestNG 这样做,但我现在正在做的一个项目没有显示任何输出,而且我在任何地方都找不到任何说明如何打开它的信息。我尝试在 tes
如果断言失败,如何在 TestNG 中继续执行测试?如何在 TestNG 的 HTML 报告中报告失败? 当我运行以下代码时,执行了断言之后的行,但在报告中未列出断言失败: @Test public
如果断言失败,如何在 TestNG 中继续执行测试?如何在 TestNG 的 HTML 报告中报告失败? 当我运行以下代码时,执行了断言之后的行,但在报告中未列出断言失败: @Test public
我在每个 wiki 使用 TestNG + ReportNG instructions在 gradle 中(我固定在食谱上,因为默认示例对我不起作用)。 我想以某种方式在 TestNG 中捕获控制台输
如何使用 TestNG 自动化功能测试,跨越多个 Java 进程? 我对尝试使用 TestNG 而不是 JUnit 产生了兴趣,因为它声称不仅仅是为单元测试而设计的,但我还没有找到具体的例子来说明如何
如何在测试用例的运行时获取当前正在运行的套件名称?我正在使用下面显示的代码来获取当前套件名称。 监听类: public class SuiteListener implements ISuiteLis
我正在使用 Selenium Webdriver 和 Java 设计一个用于测试的定制自动化框架。 现在出于报告的目的,我正在尝试将 TestNG 框架与我的项目集成。 现在我有一个基于 GUI 的界
出于某种原因,我必须使用旧的 TestNG 库,它没有 "getCurrentXmlTest()).getAllParameters()" API 我应该如何使用testng-5.4-jdk15.ja
我是一名优秀的程序员,十分优秀!