使用Test Automation的页面对象模型,我们将页面链接在一起,如下所示:
WebDriver driver = new WebDriver()
HomePage homePage = new HomePage(driver);
LoginPage loginPage = homePage.GoToLoginPage();
WelcomePage welcomePage = loginPage.Login();
etc
etc
Run Code Online (Sandbox Code Playgroud)
这样做的最大好处是,如果开发人员更改主页,使其不再链接到登录页面,我可以更新我的主页类,并在运行测试之前查看我需要更新的所有测试(有错误).
然而,对于小黄瓜,上面的每一行将形成一个单独的"步骤",因此是一个单独的方法.因此,如何进行这种连接?
是将页面对象类的实例(例如homePage,loginPage等)放入交叉gherkin语句持久性存储(例如specflow POCO或'World')的唯一方法吗?
我使用Page Object Pattern with Java(https://code.google.com/p/selenium/wiki/PageObjects)构建了各种Test Automation框架.
我发现的两大好处是:
1)当你有一个页面实例时,你可以看到可用的方法(例如,输入homepage.
会显示你可以从主页调用的所有动作/方法)
2)因为导航方法(例如goToHomepage()
)返回后续页面的实例(例如主页),所以您只需编写代码并查看它所在的位置即可浏览您的测试.
例如
WelcomePage welcomePage = loginPage.loginWithValidUser(validUser);
PaymentsPage paymentsPage = welcomePage.goToPaymentsPage();
Run Code Online (Sandbox Code Playgroud)
这些好处与Java完美配合,因为IDE已知对象类型(或本例中的页面).
但是,使用Ruby,对象类型在任何时候都不固定,并且通常对IDE不明确.因此,我无法看到如何在使用Ruby构建的自动化套件中实现这些优势(例如,使用Cucumber).
谁能告诉我如何使用Ruby与页面对象模式来获得这些好处?
我正在Eclipse中运行一个maven项目来进行我的Cucumber测试.我的测试运行器类看起来像这样:
@RunWith(Cucumber.class)
@CucumberOptions(
tags = { "@Now" },
// tags = { "@Ready" },
// tags = { "@Draft" },
features = { "src/test/java/com/myCompany/FaultReporting/Features" },
glue = { "com.myCompany.myApp.StepDefinitions" }
)
public class RunnerTest {
}
Run Code Online (Sandbox Code Playgroud)
我不想将标签硬编码到测试运行器中,而是希望使用.command文件传递它们.(即使用System.getProperty("cucumber.tag")
但是,当我将代码行添加到上面的测试运行器时,我收到错误:
@RunWith(Cucumber.class)
@CucumberOptions(
tags = { System.getProperty("cucumber.tag") }
// tags = { "@Now" },
// tags = { "@Ready" },
// tags = { "@Draft" },
features = { "src/test/java/com/myCompany/FaultReporting/Features" },
glue = { "com.myCompany.myApp.StepDefinitions" }
)
public class RunnerTest {
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:"注释属性CucumberOptions.tags的值必须是常量表达式". …
这是我的要求:
iPhone
或iPad
运行iOS 5
+ 打开链接我做了一些挖掘并提出以下选项:
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=487547243
http://itunes.apple.com/gb/app/anyValue/id487547243?mt=8
http://itunes.com/apps/seligmanVenturesLtd/mouseTrapFree
http://itunes.com/apps/mouseTrapFree
itms://itunes.com/apps/mouseTrapFree
itms-apps://itunes.com/apps/mouseTrapFree
Run Code Online (Sandbox Code Playgroud)
只是想知道其中一个(或一些)是否比其他更好?
谢谢.
我正在尝试使用appium和以下代码打开控制中心:
int halfWidth = driver.manage().window().getSize().width / 2;
int screenHeight = driver.manage().window().getSize().height;
driver.swipe(halfWidth, screenHeight-5, halfWidth, screenHeight-300, 500); // driver is instance of IOSDriver
Run Code Online (Sandbox Code Playgroud)
应用程序只是从底部向上绘制屏幕(使用坐标输入),而不是打开控制中心.任何人都知道如何使用appium和滑动(或任何其他方式)打开控制中心?
谢谢,查理
我正在使用UIActivityViewController.对于特定的共享消息,我只想为用户提供UIActivityTypePostToFacebook(即仅通过Facebook共享).我意识到我可以使用excludedActivityTypes方法排除所有其他当前活动类型.
但是,我对这种方法的担心是,将来会出现更多的活动类型,因此我的应用程序会自动添加这些活动以供将来的操作系统版本使用.
因此,我想知道是否有一种方法只能说明您想要出现的活动类型(即excludedActivityTypes方法的includedActivityTypes版本)
干杯,查理
我试图通过其完整路径(wholeElement)找到一个元素,并首先找到更高级别的元素,然后在该元素中找到更低级别的元素(modularElement).这是我的代码:
WebElement modularElement = appDriver.findElement(By.xpath("//UIATableCell[2]")).findElement(By.xpath("//UIAStaticText[4]"));
WebElement wholeElement = appDriver.findElement(By.xpath("//UIATableCell[2]/UIAStaticText[4]"));
Logger.LogMessage("modularElement attribute1: " + modularElement.getLocation(), Priority.High);
Logger.LogMessage("wholeElement attribute1: " + wholeElement.getLocation(), Priority.High);
Run Code Online (Sandbox Code Playgroud)
我遇到的真正奇怪的问题是两个元素(模块化和整体)是不同的元素而不是相同的元素(由上面代码中打印的不同位置显示).任何人都可以解释为什么会这样吗?
谢谢.
更新:
我也尝试使用.//但是仍然提供相同的问题:
WebElement modularElement = appDriver.findElement(By.xpath("//UIATableCell[2]")).findElement(By.xpath(".//UIAStaticText[4]"));
Run Code Online (Sandbox Code Playgroud) 我正在通过Jenkins运行Xcode的UI测试.每个步骤都会截取屏幕截图,因此在运行套件一段时间后,Mac会占用其所有硬盘空间.有谁知道你是否可以关闭Xcode UI Testing的自动截图,所以使用的空间更少?
我有一个标题相当长的应用程序(例如My Long Title App).我正在使用ActionBar并注意到应用程序标题一直被截断(例如我的长标题A ...).即使显示了2个操作栏项(均标记为"ifRoom"),也会发生这种情况.
有没有人知道是否有办法确保活动标题宽度优先于'ifRoom'操作栏项目(即确保我的标题显示完整,如果需要更多空间,操作栏项目移动到下拉菜单)?
非常感谢人们.
我正在使用带有swift的Xcode 7构建一个自动化套件.
我的应用加载了以下警报视图:
在使用应用程序时,允许"Light Alarm"访问您的位置?
当我使用UI测试进行录制并单击此警报时,我会收到以下代码:app.alerts ["允许\ U201cLight警报\ U201c在您使用应用程序时访问您的位置?"]
注意:引号已替换为\ U201c
但是,当我尝试编译时,我收到以下错误:"文字中的转义序列无效"
有谁知道怎么绕这个?
ios ×3
java ×3
appium ×2
automation ×2
iphone ×2
pageobjects ×2
selenium ×2
xcode ×2
android ×1
app-store ×1
cucumber ×1
cucumber-jvm ×1
eclipse ×1
escaping ×1
gherkin ×1
hyperlink ×1
properties ×1
ruby ×1
screenshot ×1
share ×1
specflow ×1
swift ×1
swipe ×1
test-runner ×1
testing ×1
title ×1
truncate ×1
ui-testing ×1
url ×1
xpath ×1