我正在尝试使用Page Object Model实现黄瓜,但是我遇到了一些问题,并且有很多疑问。
-
我的iOS应用不是那么复杂,但是我仍然想整理所有stepdef和功能以与POM中的页面相对应。因此,我将有多个stepdef和跑步者。什么是组织所有活动的最佳实践?我尝试了Pico DI,但甚至无法通过它传递驱动程序实例。(如果可以,请提供结构解决方案)
-
因为
s native iOS - I
并不会在每种情况下都关闭应用程序(这将永远存在)。但是我仍然想保持DRY功能的可重用性 创建一个appium驱动程序实例,然后再执行功能,再创建另一个appium驱动程序实例的最佳方法是什么?我了解我只需要在最后一步中添加driver.quit。我所困扰的是在所有项目(Pages,Stepdefs)中使用相同的驱动程序(请参见代码) -
我要用TestNg运行测试,想知道@Before @After注释是否仍可以在stepdefs中使用,还是最好避免使用它们?
-
主要问题:带有pico的依赖注入。由于我所有的测试都是可接受的(端到端功能测试),所以我想创建一个包含所有我的页面和驱动程序的InjectionSetUp类是否是个好主意
驱动程序管理器
public class IOSDriverManager {
public static ThreadLocal<IOSDriver<IOSElement>> webDriver = new ThreadLocal<IOSDriver<IOSElement>>();
public static DesiredCapabilities getIOSCapsLocal() {
DesiredCapabilities caps = new DesiredCapabilities();
//My caps
return caps;
public static void createThreadLocalWebDriver() {
IOSDriver<IOSElement> driver = null;
//try catch
driver = new IOSDriver<IOSElement>(new URL(APPIUM_SERVER_URL),getIOSCapsLocal());
//try catch
webDriver.set(driver);
}
public static IOSDriver<IOSElement> getThreadLocalDriver() {
IOSDriver<IOSElement> driver = webDriver.get();
if (driver == null) {
createThreadLocalWebDriver();
driver = webDriver.get();
}
return driver;
}
BasePage
public class BasePage {
IOSDriver<IOSElement> Driver;
public BasePage(IOSDriver<IOSElement> driver) {
initElements();
Driver = driver;
}
private void initElements() {
PageFactory.initElements(new AppiumFieldDecorator(getDriver()),this);
}
protected IOSDriver<IOSElement> getDriver() {
return IOSDriverManager.getThreadLocalDriver();
}
}
AnyPage
public class BiosurveyPage extends BasePage {
public BiosurveyPage(IOSDriver<IOSElement> driver) {
super(driver); // Appiumfield decorator is applied by BasePage constructor
//Is it better to just use getDriver() method throughout all pages instead of declaring driver again ?
}
最终StepDefs
public class newSignUpFlowTest{
protected IOSDriver<IOSElement> getDriver() {
return IOSDriverManager.getThreadLocalDriver();
}
LoginPage poLogin = new LoginPage(getDriver());
SignUpPage poSignup = new SignUpPage(getDriver());
// 10+ pages
@Given("I am on Login Page")
public void iAmOnLoginPage() {
assertThat("ON LOGIN PAGE",poLogin.isLoginScreen(),equalTo(true));
}
@When("I tap on Sign Up Link")
public void iTapsOnSignUpLink() {
poLogin.clickSignUp();
}
// 20+ methods for this feature
更新
我修复了所有问题并能够运行测试。现在我的问题是-我的框架看起来不错吗?我t have any real life experience prior to this. So can someone just approve me and suggest enhancements to keep up with best industry practices ? I know this post might piss some people off,but i don
不知道该在哪里进行交流,因为我在质量检查领域没有任何朋友并且无法远程工作