@When("^I start the program$") public void I_start_the_program() throws InterruptedException { programWaitLock = new Semaphore(programWaitLockPermits); addScriptEndCallbacks(); Solo solo = (Solo) Cucumber.get(Cucumber.KEY_SOLO); assertEquals( "I am in the wrong Activity.", MainMenuActivity.class, solo.getCurrentActivity().getClass()); solo.clickOnView(solo.getView(org.catrobat.catroid.R.id.main_menu_button_continue)); solo.waitForActivity(ProjectActivity.class.getSimpleName(), 3000); assertEquals( "I am in the wrong Activity.", ProjectActivity.class, solo.getCurrentActivity().getClass()); solo.clickOnView(solo.getView(org.catrobat.catroid.R.id.button_play)); solo.waitForActivity(StageActivity.class.getSimpleName(), 3000); assertEquals( "I am in the wrong Activity.", StageActivity.class, solo.getCurrentActivity().getClass()); synchronized (programStartWaitLock) { if (!programHasStarted) { programStartWaitLock.wait(10000); } } }
public void testBrowseHouseTest() { try { Report.setTCNameLog(testName); // 如果打开应用后弹出“是否打开定位功能”的提示,选择“取消” if (solo.searchText("提示")) { solo.clickOnButton(1); } if (solo.searchText("刷新")) { solo.clickOnText("刷新"); } // Action.wait(solo, R.id.view_list_item_tv_title, count, "等待详细房源类表加载成功"); // Report.writeHTMLLog("安居客浏览房源用例", "附近页房源列表显示完全",Report.DONE,""); // 如果当前城市不是上海,就切换至上海 Action.switchCity(solo, "上海"); solo.clickOnText("搜索"); Action.scroolUpPage(solo, "浏览房源"); solo.clickOnText(bureau); solo.clickOnText(area); Report.writeHTMLLog("安居客浏览房源用例", "选中区域".concat(bureau).concat(area), Report.DONE, ""); Action.wait(solo, R.id.view_list_item_tv_title, count, "等待房源列表信息显示成功"); solo.clickOnView(solo.getView(R.id.view_list_item_tv_title)); solo.waitForText("收藏"); String houseTitle = (String) ((TextView) solo.getCurrentActivity().findViewById(R.id.prop_title)).getText(); Report.writeHTMLLog( "安居客浏览房源用例", "房源列表第一套房源标题为:" + houseTitle, "Done", Action.screenShot(solo)); // 点击返回按钮 Action.clickById(solo, R.id.detail_back_button, "点击返回按钮"); // 点击”更多"tab solo.clickOnText("我的"); solo.clickOnText("浏览记录"); solo.waitForText("清空"); solo.clickOnView(solo.getView(R.id.view_for_house_history_item_tv_title)); Report.writeHTMLLog("安居客浏览房源用例", "选中最近浏览的第一套房源", Report.DONE, ""); String browseHouseTitle = (String) ((TextView) solo.getCurrentActivity().findViewById(R.id.prop_title)).getText(); Report.writeHTMLLog("安居客浏览房源用例", "最近浏览的第一套房源标题为:" + browseHouseTitle, Report.DONE, ""); Boolean flag = Action.assertString(solo, "比较收藏房源标题是否匹配", houseTitle, browseHouseTitle); if (flag) { Report.writeHTMLLog("安居客浏览房源用例", "匹配成功", Report.PASS, ""); } else { Report.writeHTMLLog("安居客浏览房源用例", "匹配不成功用例失败", Report.FAIL, Action.screenShot(solo)); } // Report.seleniumReport(); } catch (Exception e) { String ps = Action.screenShot(solo); Report.writeHTMLLog("出现异常:" + e.getMessage(), "脚本停止", Report.FAIL, ps); // Report.seleniumReport(); } }
public void testCourseDetails() { Course course = CourseContainer.instance().get(0); course.exams = SimpleMockCrawler.createExams(course); solo.clickOnText("Course #0"); assertEquals(course.name, ((TextView) solo.getView(R.id.course_name, 0)).getText()); View exam_view; exam_view = solo.getView(R.id.exam_item, 0); assertEquals("Course #0", ((TextView) exam_view.findViewById(R.id.course_text)).getText()); solo.goBack(); }
/** * The first walkthrough. Documented on the wiki. Starts on the login, ends up navigating to a * lesson after logging in. */ @Test public void testWalkthroughLoginToDashboardToCoursesToCourseToLesson() { // Login first EditText user = solo.getEditText(0); EditText pass = solo.getEditText(1); solo.typeText(user, "*****@*****.**"); solo.typeText(pass, "password"); solo.clickOnButton(solo.getString(com.huskysoft.eduki.R.string.login)); // Need to sleep to allow the activity to finish solo.sleep(8000); solo.assertCurrentActivity("Wrong activity", MainActivity.class); // Click on the all courses button solo.clickOnActionBarItem(com.huskysoft.eduki.R.id.action_courses); solo.sleep(1000); solo.assertCurrentActivity("Did not start the Course list Activity", CoursesListActivity.class); // Wait for the courses list to appear solo.waitForView(solo.getView(com.huskysoft.eduki.R.id.courseListView)); solo.sleep(1000); List<Course> courseList = ((CoursesListActivity) solo.getCurrentActivity()).getCourseList(); assertNotSame(courseList.size(), 0); solo.clickOnText("INTRODUCTION"); solo.assertCurrentActivity("Wrong activity", CourseActivity.class); // Wait for the course page to appear solo.waitForView(solo.getView(com.huskysoft.eduki.R.id.course_activity)); solo.sleep(1000); // Click a lesson, wait for it to appear List<Lesson> lessonList = ((CourseActivity) solo.getCurrentActivity()).getLessonList(); assertNotSame(lessonList.size(), 0); solo.clickOnText(lessonList.get(0).toString()); solo.waitForView(solo.getView(com.huskysoft.eduki.R.id.lessonViewLayoutText)); solo.sleep(1000); String content = ((TextView) solo.getCurrentActivity() .findViewById(com.huskysoft.eduki.R.id.lessonViewLayoutText)) .getText() .toString(); assertFalse(content.equals("")); }
public void addTab() { mSolo.clickOnView(mSolo.getView(R.id.tabs)); // wait for addTab to appear (this is usually immediate) boolean success = waitForCondition( new Condition() { @Override public boolean isSatisfied() { View addTabView = mSolo.getView(R.id.add_tab); if (addTabView == null) { return false; } return true; } }, MAX_WAIT_MS); mAsserter.ok(success, "waiting for add tab view", "add tab view available"); mSolo.clickOnView(mSolo.getView(R.id.add_tab)); }
public void testAddCourseScreenOriantationChange() { ListView listView; solo.clickOnView(getActivity().findViewById(R.id.add)); solo.enterText(0, "Course"); solo.clickOnEditText(0); solo.sendKey(Solo.ENTER); solo.waitForText("THE COURSE #2", 1, 5); listView = (ListView) solo.getView(android.R.id.list); assertEquals("List view should contain 2 items before doing anything", 2, listView.getCount()); solo.setActivityOrientation(Solo.LANDSCAPE); solo.sleep(500); listView = (ListView) solo.getView(android.R.id.list); solo.sleep(3000); assertEquals("List view should't change size after oriantation change", 2, listView.getCount()); assertEquals( "SearchView should not reset.", "Course", solo.getEditText(0).getText().toString()); solo.goBack(); solo.goBack(); }
public final void verifyPageTitle(String title) { final TextView urlBarTitle = (TextView) mSolo.getView(R.id.url_bar_title); String pageTitle = null; if (urlBarTitle != null) { // Wait for the title to make sure it has been displayed in case the view // does not update fast enough waitForCondition(new VerifyTextViewText(urlBarTitle, title), MAX_WAIT_MS); pageTitle = urlBarTitle.getText().toString(); } mAsserter.is(pageTitle, title, "Page title is correct"); }
public final void verifyUrl(String url) { final EditText urlEditText = (EditText) mSolo.getView(R.id.url_edit_text); String urlBarText = null; if (urlEditText != null) { // wait for a short time for the expected text, in case there is a delay // in updating the view waitForCondition(new VerifyTextViewText(urlEditText, url), VERIFY_URL_TIMEOUT); urlBarText = urlEditText.getText().toString(); } mAsserter.is(urlBarText, url, "Browser toolbar URL stayed the same"); }
public void testEmptyCourseListClick() { ListView listView = (ListView) solo.getView(R.id.courses_list); View emptyview = listView.getEmptyView(); assertEquals("EmptyView shoudl not be visible", View.GONE, emptyview.getVisibility()); deleteAllCourses(); assertEquals(0, listView.getCount()); assertEquals("Empty view should be visible", View.VISIBLE, emptyview.getVisibility()); solo.clickOnView(emptyview); solo.assertCurrentActivity( "Current activity shoudl Be the AddCourse Activity", AddCourseActivity.class); solo.goBack(); }
/** * Enhanced view finder. First tries to find it from Activity, then from all Views under ViewRoot. */ protected final View findViewById(int id) { View view = solo.getView(id); if (view != null) return view; ArrayList<View> views = solo.getViews(); for (View v : views) { if (v.getId() == id) { return v; } } return null; }
/** * The second test, documented on the wiki. Starts on login. Does not login, instead navigates to * a course list and ends up at a quiz. */ @Test public void testWalkthroughLoginToCoursesListToCourseToQuiz() { // Need to sleep to allow the activity to finish solo.clickOnActionBarItem(com.huskysoft.eduki.R.id.action_courses); solo.sleep(1000); solo.assertCurrentActivity("Did not start the Course list Activity", CoursesListActivity.class); // Wait for the courses list to appear solo.waitForView(solo.getView(com.huskysoft.eduki.R.id.courseListView)); solo.sleep(1000); List<Course> courseList = ((CoursesListActivity) solo.getCurrentActivity()).getCourseList(); assertNotSame(courseList.size(), 0); solo.clickOnText("INTRODUCTION"); solo.assertCurrentActivity("Wrong activity", CourseActivity.class); // Wait for the course page to appear solo.waitForView(solo.getView(com.huskysoft.eduki.R.id.course_activity)); solo.sleep(1000); // Click a quiz, wait for it to appear List<Quiz> quizList = ((CourseActivity) solo.getCurrentActivity()).getQuizList(); assertNotSame(quizList.size(), 0); solo.clickOnText(quizList.get(0).toString()); solo.waitForView(solo.getView(com.huskysoft.eduki.R.id.quizScrollView)); solo.sleep(2000); // Sleep to wait for the answers to populate List<RadioGroup> answersGroupList = ((QuizzesViewActivity) solo.getCurrentActivity()).getAnswerGroup(); for (int i = 0; i < answersGroupList.size(); i++) { RadioGroup current_rg = answersGroupList.get(i); List<RadioButton> list_rb = getRadioButtons(current_rg); assertTrue(list_rb.size() != 0); solo.clickOnView(list_rb.get(0)); // Answer "A" for everything solo.sleep(500); } solo.sleep(1000); solo.clickOnButton("SUBMIT"); solo.waitForActivity(QuizzesResultsActivity.class); solo.assertCurrentActivity("Wrong activity", QuizzesResultsActivity.class); }
protected final void enterUrl(String url) { final EditText urlEditView = (EditText) mSolo.getView(R.id.url_edit_text); focusUrlBar(); // Send the keys for the URL we want to enter mSolo.clearEditText(urlEditView); mSolo.enterText(urlEditView, url); // Get the URL text from the URL bar EditText view final String urlBarText = urlEditView.getText().toString(); mAsserter.is(url, urlBarText, "URL typed properly"); }
/** * click on the view id * * @param arguments id of the view to click * @return response with the status of the command */ private CommandResponse clickOnView(String[] arguments) { String command = "the command clickOnView"; CommandResponse result = new CommandResponse(); try { command += "(" + arguments[0] + ")"; View view = solo.getView(Integer.parseInt(arguments[0])); clickOnView(view, false, false); result.setResponse(command); result.setSucceeded(true); } catch (Exception e) { result = handleException(command, e); } return result; }
public void testDeleteCourses() { solo.clickOnCheckBox(1); solo.clickOnCheckBox(3); solo.clickOnCheckBox(5); solo.clickOnCheckBox(7); solo.clickOnView(getActivity().findViewById(R.id.delete)); ListView listView = (ListView) solo.getView(R.id.courses_list); assertEquals("Listview should only contain 6 courses", 5, listView.getCount()); for (int i = 0; i < 9; i++) { if (i % 2 == 0) { assertTrue(solo.searchText("Course #" + i)); } } }
public final void verifyHomePagerHidden() { final View homePagerContainer = mSolo.getView(R.id.home_pager_container); boolean rc = waitForCondition( new Condition() { @Override public boolean isSatisfied() { return homePagerContainer.getVisibility() != View.VISIBLE; } }, MAX_WAIT_HOME_PAGER_HIDDEN_MS); if (!rc) { mAsserter.ok(rc, "Verify HomePager is hidden", "HomePager is hidden"); } }
public void testSpinnerUpdatesRename() { String newName = "nameRenamed"; String spinnerNothingText = solo.getString(R.string.broadcast_nothing_selected); solo.clickOnText(spinnerNothingText); assertTrue(costumeName + " is not in Spinner", solo.searchText(costumeName)); assertTrue(costumeName2 + " is not in Spinner", solo.searchText(costumeName2)); solo.goBack(); solo.clickOnText(getActivity().getString(R.string.backgrounds)); solo.clickOnView(solo.getView(R.id.costume_name)); solo.clearEditText(0); solo.enterText(0, newName); solo.clickOnButton(getActivity().getString(R.string.ok)); solo.sleep(500); solo.clickOnText(getActivity().getString(R.string.scripts)); solo.clickOnText(spinnerNothingText); assertTrue(newName + " is not in Spinner", solo.searchText(newName)); assertTrue(costumeName2 + " is not in Spinner", solo.searchText(costumeName2)); }
/** Click on the URL bar to focus it and enter editing mode. */ protected final void focusUrlBar() { // Click on the browser toolbar to enter editing mode final View toolbarView = mSolo.getView(R.id.browser_toolbar); mSolo.clickOnView(toolbarView); // Wait for highlighed text to gain focus boolean success = waitForCondition( new Condition() { @Override public boolean isSatisfied() { EditText urlEditText = mSolo.getEditText(0); if (urlEditText.isInputMethodTarget()) { return true; } else { mSolo.clickOnEditText(0); return false; } } }, MAX_WAIT_ENABLED_TEXT_MS); mAsserter.ok(success, "waiting for urlbar text to gain focus", "urlbar text gained focus"); }
public void testLoginValidation() throws TestException { try { Log.i(TAG, "------It is testLoginValidation()-----------"); activityName = soloLoginValid.getCurrentActivity().getClass().getSimpleName(); if (activityName.equalsIgnoreCase("MainActivity")) { Log.i(TAG, "------It is MainActivity-----------" + activityName); soloLoginValid.waitForActivity("HomeActivity", 2000); for (int i = 0; i < 40; i++) { activityName = soloLoginValid.getCurrentActivity().getClass().getSimpleName(); if (activityName.equalsIgnoreCase("HomeActivity")) { Log.i(TAG, "------for()-- loop-----"); break; } soloLoginValid.waitForActivity("HomeActivity", 2000); } } else { Log.i(TAG, "------ testLoginValidation failed-----------"); throw new TestException( "Current Activity Failed----" + soloLoginValid.getCurrentActivity().getClass().getSimpleName() + "failed"); } if (activityName.equalsIgnoreCase("HomeActivity")) { Log.i(TAG, "------HomeActivity-----------"); System.out.println(" Activity name ---->" + soloLoginValid.getCurrentActivity()); ArrayList<View> al = soloLoginValid.getViews(); Iterator<View> it = al.iterator(); while (it.hasNext()) { String viewName = it.next().getClass().getSimpleName(); if (viewName.equalsIgnoreCase("ImageView")) { Log.i(TAG, "------ImageView found-----------"); break; } continue; } } else { Log.i(TAG, "------HomeActivity not found-----------"); throw new TestException( TAG + soloLoginValid.getCurrentActivity().getClass().getSimpleName() + "failed"); } // click on Loginbutton soloLoginValid.waitForActivity("MainActivity", 5000); // get the login button view with id i.e home_login_btn ImageView loginButton = (ImageView) soloLoginValid.getView(R.id.home_login_btn); // click on login button with view id soloLoginValid.clickOnView(loginButton); // control waits for 2 seconds to activate the screen soloLoginValid.waitForActivity("SplashActivity", 2000); // clears the text at first Editfield EditText emailField = (EditText) soloLoginValid.getView(R.id.txt_email); soloLoginValid.clearEditText(emailField); // it will type the text at first field which i gave in method soloLoginValid.enterText(emailField, "android@"); // clear the text at second Editfield EditText passwordField = (EditText) soloLoginValid.getView(R.id.txt_password); soloLoginValid.clearEditText(passwordField); // finding the password field view // click the password field based on EditText view object soloLoginValid.clickOnView(passwordField); soloLoginValid.waitForActivity("MainActivity", 1000); soloLoginValid.enterText(passwordField, "*****"); soloLoginValid.waitForActivity("MainActivity", 1000); // click on Login button ImageView clickLogin = (ImageView) soloLoginValid.getView(R.id.login_btn); soloLoginValid.clickOnView(clickLogin); // soloSplash.clickOnImageButton(1); soloLoginValid.waitForActivity("LoginActivity"); soloLoginValid.clickOnView(emailField); soloLoginValid.waitForActivity("LoginActivity", 1000); boolean valid = soloLoginValid.searchText("Invalid Email address!"); if (valid) { assertTrue("Invalid Email address!", valid); } else { throw new TestException("Testcase failed"); } soloLoginValid.waitForActivity("LoginActivity", 1000); // Get the view location of cancel button. clickCancel = (ImageView) soloLoginValid.getView(R.id.cancel_btn); soloLoginValid.waitForActivity("MainActivity", 1000); // click on cancel button soloLoginValid.clickOnView(clickCancel); soloLoginValid.waitForActivity("LoginActivity", 1000); } catch (TestException e) { e.printStackTrace(); } }