我正在使用 timestamp = "2019-02-16T10:41:20.6080000+01:00"
cleaned_timestamp = re.sub('(\d{6})\d(\+\d{2})(:)(\d{2})', r'\1\2\4', timestamp)
parsed_timestamp = datetime.datetime.strptime(cleaned_timestamp, "%Y-%m-%dT%H:%M:%S.%f%z")
parsed_timestamp
测试我的移动应用。应用启动时,有时会直接导航到datetime.datetime(2019, 2, 16, 10, 41, 20, 608000, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
(如果用户已经登录)。如果用户未登录,则打开Appium
。
那么,我怎么知道哪个HomeActivity
开始?这样我就可以相应地执行注销代码。
此代码根本无法执行,因为应用直接导航到LoginActivity
,而不是activity
。
HomeActivity
答案 0 :(得分:1)
您需要一种将页面识别为主页或登录页面的方法。 如果您有权访问移动应用程序源代码,则可以为主页提供“ homePage” AutomationId,为登录页面提供“ loginPage” AutomationId。如果不可能,请开发人员为您添加它们。在您的appium代码中使用这些ID来唯一标识已加载的页面。
在您的appium代码中,这些是您需要执行的步骤:
启动您的应用:driver = new AndroidDriver<AndroidElement>(url, cap);
花一些时间来加载应用。
检查您所在的页面,例如通过检查这些页面的AutomationId或其他唯一值。
在测试脚本中,您可以这样做:
try
{
control = driver.FindElementByAccessibilityId("loginPage");
}
catch (Exception ex)
{
// No login page found, your in the home page.
// Code for logging out here.
}
正如Suban Dhyako已经建议的那样,页面对象设计模式是一个很好的实践。它使您的代码干净整洁,易于阅读。您可以详细了解here。
答案 1 :(得分:1)
如果您始终想在全新的应用中进行测试,则可以在DesiredCapabilities中添加 noReset = false 功能。
如果要检查哪个屏幕可见,homeActivityScreen和LoginActivityScreen中必须有唯一的元素或ID。然后,您可以使用 isDisplayed()函数。
如果您使用页面对象模型,则很容易检查哪个屏幕是“显示”。
我将用Java代码显示页面对象模型的示例。希望您可以将其转换为C#代码
public class HomeActivityScreen {
//you can use accessibility, id or xpath
@AndroidFindBy(id = " your element id")
private MobileElement element1;
@AndroidFindBy(id = "element id")
private MobileElement element2;
public HomeActivityScreen(AppiumDriver<MobileElement> driver) {
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public boolean isScreenDisplayed() {
try {
return element1.isDisplayed();
} catch (Exception e) {
return false;
}
}
}
类似地,您可以为其他屏幕添加页面对象模型。然后在测试课程中,您可以检查哪个屏幕可见
HomeActivityScreen homeScreen = new HomeActivityScreen(driver);
LoginActivityScreen loginScreen = new LoginActivityScreen(driver);
if(homeScreen.isScreenDisplayed){
//write your code
}else if(loginScreen.isScreenDisplayed){
//write logout code
}else{
//none of above screen is visible
}