- 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/
我正在尝试使用 POM 创建一个测试框架,但每当我使用 PageFactory 时,它都会给出一个 NullPointerException。 我只是想打开应用程序并检查给定元素在页面上的位置。 这是
我正在用 C# 创建一个测试自动化框架。在项目的顶部,我有“使用 OpenQA.Selenium.Support.PageObjects;”,但是当我尝试引用 PageFactory.initElem
我正在我的页面对象模型自动化框架中实现 pagefactory。我现有的框架在没有 pagefactory 的情况下工作正常。现在我正在实现 pagefactory 来调用元素。我面临一个问题,即 P
我实现了一个 PageFactory BasePage 类,它保存测试页面的 webements。我在 BasePage 中为 WebDriver 驱动程序引用创建了一个构造函数 import org
我在 Java 中有这个带有 css 定位器的等待命令,然后单击它。 new WebDriverWait(driver, 10).until(ExpectedConditions.presence
我在一个页面上有多个元素,我想使用 PageFactory 初始化它们。 我试过使用下面的方法 @FindBy(xpath = "//*[contains(@class,'x-grid-tree-no
我最近开始使用 Selenium2 和页面对象模式 与 Page Factory 结合使用。我有声明的 WebElements @FindBy 由 PageFactory 初始化的注解,当 类被初始化
我正在尝试学习 PageFactory 模型。我明白当我们做 initElements 的时候,WebElements 位于。例如,我单击一个 web 元素,因此 DOM 中的其他 web 元素之一发
有没有办法通过作为另一个注释实现的动态等待来扩展 Selenium 页面模型。 .. 我已经实现了 wait4element() ,我只想将其添加为另一个注释,类似于 @FindBy 。 我该怎么做?
我动态生成的定位器取决于将从列表中选择哪个元素。 例如,这是我生成的 ID: Function:TableName:0:submenuAction 0 是计数器,表示从列表中选择第一个元素。计数器前后
我遵循页面对象模型,并使用基类,该类具有所有常见且可重用的方法,并为我的 Web 应用程序的每个页面提供单独的页面。 现在我正在尝试在 BasePage 中创建一个可以在其他页面中使用的方法。在每个页
我有一个问题。两者有什么区别: @FindBy(id= "submit-button") WebElement submitButton; public void submitClick() {
这个问题在这里已经有了答案: StaleElementReference Exception in PageFactory (3 个答案) 关闭 4 年前。 在使用 Pagefactory 时,我直
我只是想知道 PageFactory.initElements(driver, this) 的工作原理,它如何填充 searchSuggestions webElement 并且如果我不使用 thre
我正在使用 selenium 页面工厂。在使用任何 WebElements 时,我收到空指针异常。 import java.io.IOException; import org.openqa.sele
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我在 Visual Studio 2010 中收到警告消息:“从未分配字段”。我使用在运行时分配字段的 Webdriver PageFactory,如何抑制此消息? 这里是代码示例: public c
我试图在我的 Selenium 测试中使用 PageObject 设计模式,并且我有以下一组 Page 类: PageObject 基类,它跟踪 WebDriver 和站点的基 URL。它还具有私有(
我是一名优秀的程序员,十分优秀!