hegl 8 years ago
parent
commit
ee58c1057d

+ 11 - 0
.idea/PythonSpace.iml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="TestRunnerService">
+    <option name="PROJECT_TEST_RUNNER" value="Unittests" />
+  </component>
+</module>

+ 9 - 0
.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,9 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="projectProfile" value="Default" />
+    <option name="useProjectProfile" value="false" />
+    <option name="PROJECT_PROFILE" value="Default" />
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 4 - 0
.idea/misc.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.13 (D:\Program Files (x86)\Python27\python.exe)" project-jdk-type="Python SDK" />
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/PythonSpace.iml" filepath="$PROJECT_DIR$/.idea/PythonSpace.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 945 - 0
.idea/workspace.xml

@@ -0,0 +1,945 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="82c8521e-4e92-439a-a797-bd5cecfdccd4" name="Default" comment="" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="CoverageDataManager">
+    <SUITE FILE_PATH="coverage/PythonSpace$test_htmltestrunner.coverage" NAME="test_htmltestrunner Coverage Results" MODIFIED="1490769182058" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/MyTest" />
+    <SUITE FILE_PATH="coverage/PythonSpace$moaTest.coverage" NAME="moaTest Coverage Results" MODIFIED="1491037013859" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/MyTest" />
+    <SUITE FILE_PATH="coverage/PythonSpace$Unittests_in_HTMLTestRunner.coverage" NAME="Unittests in HTMLTestRunner Coverage Results" MODIFIED="1490767215505" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
+    <SUITE FILE_PATH="coverage/PythonSpace$firstpy__1_.coverage" NAME="firstpy (1) Coverage Results" MODIFIED="1490769017641" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/MyTest" />
+    <SUITE FILE_PATH="coverage/PythonSpace$Unittests_in_qqTest.coverage" NAME="Unittests in qqTest Coverage Results" MODIFIED="1490934080753" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/MyTest" />
+    <SUITE FILE_PATH="coverage/PythonSpace$qqTest.coverage" NAME="qqTest Coverage Results" MODIFIED="1491024644901" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/MyTest" />
+    <SUITE FILE_PATH="coverage/PythonSpace$android_test.coverage" NAME="android_test Coverage Results" MODIFIED="1490257103383" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
+    <SUITE FILE_PATH="coverage/PythonSpace$test.coverage" NAME="test Coverage Results" MODIFIED="1486630289684" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
+    <SUITE FILE_PATH="coverage/PythonSpace$firstpy.coverage" NAME="firstpy Coverage Results" MODIFIED="1490933877884" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
+    <SUITE FILE_PATH="coverage/PythonSpace$hellow_python.coverage" NAME="hellow python Coverage Results" MODIFIED="1487743932113" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
+  </component>
+  <component name="CreatePatchCommitExecutor">
+    <option name="PATCH_PATH" value="" />
+  </component>
+  <component name="DatabaseView">
+    <option name="GROUP_SCHEMA" value="true" />
+    <option name="GROUP_CONTENTS" value="false" />
+    <option name="SORT_POSITIONED" value="false" />
+    <option name="SHOW_TABLE_DETAILS" value="true" />
+    <option name="SHOW_EMPTY_GROUPS" value="false" />
+    <option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
+  </component>
+  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
+  <component name="FavoritesManager">
+    <favorites_list name="PythonSpace" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file leaf-file-name="moaTest.py" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/MyTest/moaTest.py">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="152">
+              <caret line="10" column="43" lean-forward="true" selection-start-line="10" selection-start-column="43" selection-end-line="10" selection-end-column="43" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="one.py" pinned="false" current-in-tab="false">
+        <entry file="file://E:/桌面/one.py">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="361">
+              <caret line="21" column="32" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="190" selection-end-column="16" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="case.py" pinned="false" current-in-tab="false">
+        <entry file="file://D:/Program Files (x86)/Python27/Lib/unittest/case.py">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="5985">
+              <caret line="328" column="0" lean-forward="false" selection-start-line="328" selection-start-column="0" selection-end-line="328" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Python Script" />
+      </list>
+    </option>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>Dttest</find>
+      <find>ent</find>
+      <find>passer</find>
+      <find>tap</find>
+      <find>try</find>
+      <find>scroll</find>
+    </findStrings>
+    <replaceStrings>
+      <replace>PYtest</replace>
+    </replaceStrings>
+  </component>
+  <component name="Git.Settings">
+    <option name="PREVIOUS_COMMIT_AUTHORS">
+      <list>
+        <option value="hegl" />
+      </list>
+    </option>
+    <option name="PUSH_AUTO_UPDATE" value="true" />
+    <option name="ROOT_SYNC" value="DONT_SYNC" />
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/test.py" />
+        <option value="$PROJECT_DIR$/foo.txt" />
+        <option value="$PROJECT_DIR$/hellow python.py" />
+        <option value="$PROJECT_DIR$/android_test.py" />
+        <option value="$PROJECT_DIR$/HTMLTestRunner.py" />
+        <option value="$PROJECT_DIR$/firstpy.py" />
+        <option value="$PROJECT_DIR$/Demo/login.py" />
+        <option value="D:/Program Files (x86)/Python27/Lib/site-packages/HTMLTestRunner.py" />
+        <option value="$PROJECT_DIR$/Demo/test_HTMLTestRunner.py" />
+        <option value="$PROJECT_DIR$/MyTest/test_HTMLTestRunner.py" />
+        <option value="$PROJECT_DIR$/MyTest/firstpy.py" />
+        <option value="$PROJECT_DIR$/MyTest/qqTest.py" />
+        <option value="$PROJECT_DIR$/common/errorStatus.py" />
+        <option value="$PROJECT_DIR$/common/utility.py" />
+        <option value="$PROJECT_DIR$/MyTest/moaTest.py" />
+      </list>
+    </option>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="x" value="2487" />
+    <option name="y" value="-151" />
+    <option name="width" value="1932" />
+    <option name="height" value="1062" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="PythonSpace" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="External Libraries" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="PythonSpace" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="PythonSpace" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="common" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="PythonSpace" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="PythonSpace" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="MyTest" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="PythonSpace" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="PythonSpace" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="Demo" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+      <pane id="Scratches" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="nodejs_interpreter_path" value="D:/Program Files/nodejs/node" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="js.eslint.eslintPackage" value="" />
+    <property name="js-jscs-nodeInterpreter" value="D:\Program Files\nodejs\node.exe" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="settings.editor.selected.configurable" value="vcs.Git" />
+  </component>
+  <component name="RecentsManager">
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="D:\AutoTest\PythonSpace\MyTest" />
+      <recent name="D:\AutoTest\PythonSpace\Demo" />
+      <recent name="D:\AutoTest\PythonSpace" />
+    </key>
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\AutoTest\PythonSpace" />
+    </key>
+  </component>
+  <component name="RunManager" selected="Python.moaTest">
+    <configuration default="false" name="firstpy" type="PythonConfigurationType" factoryName="Python" temporary="true">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs>
+        <env name="PYTHONUNBUFFERED" value="1" />
+      </envs>
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="IS_MODULE_SDK" value="true" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="D:\AutoTest\PythonSpace\MyTest\moaTest.py" />
+      <option name="PARAMETERS" value="" />
+      <option name="SHOW_COMMAND_LINE" value="false" />
+      <method />
+    </configuration>
+    <configuration default="false" name="test_htmltestrunner" type="PythonConfigurationType" factoryName="Python" temporary="true">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs>
+        <env name="PYTHONUNBUFFERED" value="1" />
+      </envs>
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/MyTest" />
+      <option name="IS_MODULE_SDK" value="true" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/MyTest/test_HTMLTestRunner.py" />
+      <option name="PARAMETERS" value="" />
+      <option name="SHOW_COMMAND_LINE" value="false" />
+      <method />
+    </configuration>
+    <configuration default="false" name="Unittests in qqTest" type="tests" factoryName="Unittests" temporary="true" nameIsGenerated="true">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/MyTest" />
+      <option name="IS_MODULE_SDK" value="true" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/MyTest/qqTest.py" />
+      <option name="CLASS_NAME" value="" />
+      <option name="METHOD_NAME" value="" />
+      <option name="FOLDER_NAME" value="" />
+      <option name="TEST_TYPE" value="TEST_SCRIPT" />
+      <option name="PATTERN" value="" />
+      <option name="USE_PATTERN" value="false" />
+      <option name="PUREUNITTEST" value="true" />
+      <option name="PARAMS" value="" />
+      <option name="USE_PARAM" value="false" />
+      <method />
+    </configuration>
+    <configuration default="false" name="qqTest" type="PythonConfigurationType" factoryName="Python" temporary="true">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs>
+        <env name="PYTHONUNBUFFERED" value="1" />
+      </envs>
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/MyTest" />
+      <option name="IS_MODULE_SDK" value="true" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/MyTest/qqTest.py" />
+      <option name="PARAMETERS" value="" />
+      <option name="SHOW_COMMAND_LINE" value="false" />
+      <method />
+    </configuration>
+    <configuration default="false" name="moaTest" type="PythonConfigurationType" factoryName="Python" temporary="true">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs>
+        <env name="PYTHONUNBUFFERED" value="1" />
+      </envs>
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/MyTest" />
+      <option name="IS_MODULE_SDK" value="true" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/MyTest/moaTest.py" />
+      <option name="PARAMETERS" value="" />
+      <option name="SHOW_COMMAND_LINE" value="false" />
+      <method />
+    </configuration>
+    <configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs>
+        <env name="PYTHONUNBUFFERED" value="1" />
+      </envs>
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="TARGET" value="" />
+      <option name="SETTINGS_FILE" value="" />
+      <option name="CUSTOM_SETTINGS" value="false" />
+      <option name="USE_OPTIONS" value="false" />
+      <option name="OPTIONS" value="" />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
+      <config-file value="" />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
+      <method />
+    </configuration>
+    <configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="ADDITIONAL_ARGS" value="" />
+      <method />
+    </configuration>
+    <configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="ADDITIONAL_ARGS" value="" />
+      <method />
+    </configuration>
+    <configuration default="true" type="PythonConfigurationType" factoryName="Python">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs>
+        <env name="PYTHONUNBUFFERED" value="1" />
+      </envs>
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="PARAMETERS" value="" />
+      <option name="SHOW_COMMAND_LINE" value="false" />
+      <method />
+    </configuration>
+    <configuration default="true" type="Tox" factoryName="Tox">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <module name="PythonSpace" />
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <gulpfile />
+      <tasks />
+      <arguments />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.npm" factoryName="npm">
+      <command value="run" />
+      <scripts />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="tests" factoryName="Attests">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="CLASS_NAME" value="" />
+      <option name="METHOD_NAME" value="" />
+      <option name="FOLDER_NAME" value="" />
+      <option name="TEST_TYPE" value="TEST_SCRIPT" />
+      <option name="PATTERN" value="" />
+      <option name="USE_PATTERN" value="false" />
+      <method />
+    </configuration>
+    <configuration default="true" type="tests" factoryName="Doctests">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="CLASS_NAME" value="" />
+      <option name="METHOD_NAME" value="" />
+      <option name="FOLDER_NAME" value="" />
+      <option name="TEST_TYPE" value="TEST_SCRIPT" />
+      <option name="PATTERN" value="" />
+      <option name="USE_PATTERN" value="false" />
+      <method />
+    </configuration>
+    <configuration default="true" type="tests" factoryName="Nosetests">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="CLASS_NAME" value="" />
+      <option name="METHOD_NAME" value="" />
+      <option name="FOLDER_NAME" value="" />
+      <option name="TEST_TYPE" value="TEST_SCRIPT" />
+      <option name="PATTERN" value="" />
+      <option name="USE_PATTERN" value="false" />
+      <option name="PARAMS" value="" />
+      <option name="USE_PARAM" value="false" />
+      <method />
+    </configuration>
+    <configuration default="true" type="tests" factoryName="Unittests">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="CLASS_NAME" value="" />
+      <option name="METHOD_NAME" value="" />
+      <option name="FOLDER_NAME" value="" />
+      <option name="TEST_TYPE" value="TEST_SCRIPT" />
+      <option name="PATTERN" value="" />
+      <option name="USE_PATTERN" value="false" />
+      <option name="PUREUNITTEST" value="true" />
+      <option name="PARAMS" value="" />
+      <option name="USE_PARAM" value="false" />
+      <method />
+    </configuration>
+    <configuration default="true" type="tests" factoryName="py.test">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="PythonSpace" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="CLASS_NAME" value="" />
+      <option name="METHOD_NAME" value="" />
+      <option name="FOLDER_NAME" value="" />
+      <option name="TEST_TYPE" value="TEST_SCRIPT" />
+      <option name="PATTERN" value="" />
+      <option name="USE_PATTERN" value="false" />
+      <option name="testToRun" value="" />
+      <option name="keywords" value="" />
+      <option name="params" value="" />
+      <option name="USE_PARAM" value="false" />
+      <option name="USE_KEYWORD" value="false" />
+      <method />
+    </configuration>
+    <list size="5">
+      <item index="0" class="java.lang.String" itemvalue="Python.firstpy" />
+      <item index="1" class="java.lang.String" itemvalue="Python.test_htmltestrunner" />
+      <item index="2" class="java.lang.String" itemvalue="Python tests.Unittests in qqTest" />
+      <item index="3" class="java.lang.String" itemvalue="Python.qqTest" />
+      <item index="4" class="java.lang.String" itemvalue="Python.moaTest" />
+    </list>
+    <recent_temporary>
+      <list size="5">
+        <item index="0" class="java.lang.String" itemvalue="Python.moaTest" />
+        <item index="1" class="java.lang.String" itemvalue="Python.qqTest" />
+        <item index="2" class="java.lang.String" itemvalue="Python tests.Unittests in qqTest" />
+        <item index="3" class="java.lang.String" itemvalue="Python.firstpy" />
+        <item index="4" class="java.lang.String" itemvalue="Python.test_htmltestrunner" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false">
+    <option name="remove_strategy" value="false" />
+  </component>
+  <component name="SvnConfiguration">
+    <configuration>C:\Users\hegl\AppData\Roaming\Subversion</configuration>
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="82c8521e-4e92-439a-a797-bd5cecfdccd4" name="Default" comment="" />
+      <created>1486531264427</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1486531264427</updated>
+    </task>
+    <task id="LOCAL-00001" summary="python demo">
+      <created>1491369907320</created>
+      <option name="number" value="00001" />
+      <option name="presentableId" value="LOCAL-00001" />
+      <option name="project" value="LOCAL" />
+      <updated>1491369907320</updated>
+    </task>
+    <task id="LOCAL-00002" summary="update moaTest">
+      <created>1491370385593</created>
+      <option name="number" value="00002" />
+      <option name="presentableId" value="LOCAL-00002" />
+      <option name="project" value="LOCAL" />
+      <updated>1491370385593</updated>
+    </task>
+    <option name="localTasksCounter" value="3" />
+    <servers />
+  </component>
+  <component name="TestHistory">
+    <history-entry file="Unittests_in_HTMLTestRunner - 2017.02.09 at 16h 11m 56s.xml">
+      <configuration name="Unittests in HTMLTestRunner" configurationId="tests" />
+    </history-entry>
+    <history-entry file="Unittests_in_HTMLTestRunner - 2017.02.09 at 17h 02m 03s.xml">
+      <configuration name="Unittests in HTMLTestRunner" configurationId="tests" />
+    </history-entry>
+    <history-entry file="Unittests_in_HTMLTestRunner - 2017.03.29 at 13h 13m 30s.xml">
+      <configuration name="Unittests in HTMLTestRunner" configurationId="tests" />
+    </history-entry>
+    <history-entry file="Unittests_in_HTMLTestRunner - 2017.03.29 at 13h 56m 59s.xml">
+      <configuration name="Unittests in HTMLTestRunner" configurationId="tests" />
+    </history-entry>
+    <history-entry file="Unittests_in_HTMLTestRunner - 2017.03.29 at 14h 00m 11s.xml">
+      <configuration name="Unittests in HTMLTestRunner" configurationId="tests" />
+    </history-entry>
+    <history-entry file="Unittests_in_HTMLTestRunner - 2017.03.29 at 14h 00m 16s.xml">
+      <configuration name="Unittests in HTMLTestRunner" configurationId="tests" />
+    </history-entry>
+    <history-entry file="Unittests_in_qqTest - 2017.03.31 at 12h 21m 22s.xml">
+      <configuration name="Unittests in qqTest" configurationId="tests" />
+    </history-entry>
+  </component>
+  <component name="TodoView">
+    <todo-panel id="selected-file">
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+    <todo-panel id="all">
+      <are-packages-shown value="true" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="2487" y="-151" width="1932" height="1062" extended-state="0" />
+    <editor active="false" />
+    <layout>
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.26356995" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.23109244" sideWeight="0.5222656" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
+      <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.30586487" sideWeight="0.47916666" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.5204617" sideWeight="0.4777344" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="processedProjectFiles" value="true" />
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <MESSAGE value="python demo" />
+    <MESSAGE value="update moaTest" />
+    <option name="LAST_COMMIT_MESSAGE" value="update moaTest" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <default-breakpoints>
+        <breakpoint type="python-exception">
+          <properties notifyOnTerminate="true" exception="BaseException">
+            <option name="notifyOnTerminate" value="true" />
+          </properties>
+        </breakpoint>
+      </default-breakpoints>
+      <option name="time" value="104" />
+    </breakpoint-manager>
+    <watches-manager />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/Demo/hellow python.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/moaTest.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="399">
+          <caret line="21" column="71" lean-forward="true" selection-start-line="21" selection-start-column="71" selection-end-line="21" selection-end-column="71" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Demo/hellow python.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/moaTest.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="76">
+          <caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Demo/hellow python.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="133">
+          <caret line="7" column="0" lean-forward="true" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/moaTest.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="133">
+          <caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Demo/hellow python.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/moaTest.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="133">
+          <caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Demo/hellow python.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test.py" />
+    <entry file="file://$PROJECT_DIR$/test.py" />
+    <entry file="file://$PROJECT_DIR$/test.py" />
+    <entry file="file://$PROJECT_DIR$/test.py" />
+    <entry file="file://$PROJECT_DIR$/calc.py" />
+    <entry file="file://$PROJECT_DIR$/test.py" />
+    <entry file="file://$PROJECT_DIR$/Common/send.py" />
+    <entry file="file://$PROJECT_DIR$/foo.txt" />
+    <entry file="file://$PROJECT_DIR$/test.txt" />
+    <entry file="file://$PROJECT_DIR$/testfile" />
+    <entry file="file://$PROJECT_DIR$/text.txt" />
+    <entry file="file://E:/桌面/HTMLTestRunner.py" />
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/appium/webdriver/__init__.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="361">
+          <caret line="19" column="29" lean-forward="true" selection-start-line="19" selection-start-column="29" selection-end-line="19" selection-end-column="29" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/appium/webdriver/webelement.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="261">
+          <caret line="20" column="6" lean-forward="false" selection-start-line="20" selection-start-column="6" selection-end-line="20" selection-end-column="6" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Demo/hellow python.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="114">
+          <caret line="6" column="0" lean-forward="false" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Demo/android_test.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="670">
+          <caret line="38" column="34" lean-forward="false" selection-start-line="38" selection-start-column="34" selection-end-line="38" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/Documents/Tencent Files/121354090/FileRecv/testLogin.py" />
+    <entry file="file://$PROJECT_DIR$/Demo/HTMLTestRunner.py" />
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/selenium/webdriver/remote/errorhandler.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="594">
+          <caret line="191" column="0" lean-forward="false" selection-start-line="191" selection-start-column="0" selection-end-line="191" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/HTMLTestRunner.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-1102">
+          <caret line="285" column="14" lean-forward="false" selection-start-line="285" selection-start-column="14" selection-end-line="285" selection-end-column="14" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/test_HTMLTestRunner.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="570">
+          <caret line="146" column="8" lean-forward="true" selection-start-line="146" selection-start-column="8" selection-end-line="146" selection-end-column="8" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Demo/login.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="532">
+          <caret line="42" column="44" lean-forward="true" selection-start-line="42" selection-start-column="44" selection-end-line="42" selection-end-column="44" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/__init__.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/2017-0331.html" />
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/selenium/webdriver/remote/webelement.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="632">
+          <caret line="192" column="0" lean-forward="true" selection-start-line="192" selection-start-column="0" selection-end-line="192" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/selenium/webdriver/support/event_firing_webdriver.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="404">
+          <caret line="257" column="51" lean-forward="true" selection-start-line="257" selection-start-column="51" selection-end-line="257" selection-end-column="51" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/appium/webdriver/common/touch_action.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="182">
+          <caret line="20" column="1" lean-forward="true" selection-start-line="20" selection-start-column="1" selection-end-line="20" selection-end-column="1" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.PyCharm2016.3/system/python_stubs/1751283516/time.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="113">
+          <caret line="115" column="42" lean-forward="true" selection-start-line="115" selection-start-column="42" selection-end-line="115" selection-end-column="42" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/qqTest.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="912">
+          <caret line="48" column="27" lean-forward="true" selection-start-line="48" selection-start-column="27" selection-end-line="48" selection-end-column="27" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/common/errorStatus.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="23" lean-forward="false" selection-start-line="0" selection-start-column="23" selection-end-line="0" selection-end-column="23" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.PyCharm2016.3/system/python_stubs/1751283516/exceptions.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="231">
+          <caret line="20" column="19" lean-forward="false" selection-start-line="20" selection-start-column="17" selection-end-line="20" selection-end-column="19" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/selenium/webdriver/remote/webdriver.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="608">
+          <caret line="271" column="0" lean-forward="false" selection-start-line="271" selection-start-column="0" selection-end-line="279" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.PyCharm2016.3/system/python_stubs/1751283516/__builtin__.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="233">
+          <caret line="468" column="4" lean-forward="false" selection-start-line="468" selection-start-column="4" selection-end-line="468" selection-end-column="4" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/.PyCharm2016.3/system/python_stubs/1751283516/nt.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="322">
+          <caret line="209" column="4" lean-forward="false" selection-start-line="209" selection-start-column="4" selection-end-line="209" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/site-packages/appium/webdriver/webdriver.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="322">
+          <caret line="690" column="8" lean-forward="false" selection-start-line="690" selection-start-column="8" selection-end-line="690" selection-end-column="8" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$APPLICATION_HOME_DIR$/helpers/pydev/pydevd.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="739">
+          <caret line="1595" column="0" lean-forward="false" selection-start-line="1595" selection-start-column="0" selection-end-line="1595" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/unittest/suite.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="274">
+          <caret line="69" column="0" lean-forward="false" selection-start-line="69" selection-start-column="0" selection-end-line="69" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/unittest/runner.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="689">
+          <caret line="195" column="0" lean-forward="false" selection-start-line="195" selection-start-column="0" selection-end-line="195" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/common/utility.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="19">
+          <caret line="1" column="0" lean-forward="true" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/Program Files (x86)/Python27/Lib/unittest/case.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="5985">
+          <caret line="328" column="0" lean-forward="false" selection-start-line="328" selection-start-column="0" selection-end-line="328" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://E:/桌面/one.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="361">
+          <caret line="21" column="32" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="190" selection-end-column="16" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MyTest/moaTest.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="152">
+          <caret line="10" column="43" lean-forward="true" selection-start-line="10" selection-start-column="43" selection-end-line="10" selection-end-column="43" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>

+ 0 - 0
Demo/__init__.py


+ 39 - 0
Demo/android_test.py

@@ -0,0 +1,39 @@
+# coding:utf-8
+import os
+import unittest
+
+from selenium import webdriver
+
+# Returns abs path relative to this file and not cwd
+PATH = lambda p: os.path.abspath(
+    os.path.join(os.path.dirname(__file__), p)
+)
+
+
+class elementA(unittest.TestCase):
+    def test_(self):
+        desired_caps = {}
+        desired_caps['deviceName'] = '4d00b6a5bee8a047'  # adb devices查到的设备名
+        desired_caps['platformName'] = 'Android'
+        desired_caps['platformVersion'] = '4.2'
+        desired_caps['appPackage'] = 'com.duowan.mobile'  # 被测App的包名
+        desired_caps['appActivity'] = 'com.yy.mobile.ui.splash.SplashActivity'  # 启动时的Activity
+        driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
+
+        el = driver.find_element_by_name(u"神曲")
+        self.assertIsNotNone(el)
+        el.click()
+        yueBang = driver.find_element_by_name(u"月榜")
+        self.assertIsNotNone(yueBang)
+        yueBang.click()
+        driver.quit()
+
+
+if __name__ == '__main__':
+    testunit = unittest.TestSuite()  # 定义一个单元测试容器
+    testunit.addTest(elementA("test_"))  # 将测试用例加入到测试容器中
+    filename = "./myAppiumLog.html"  # 定义个报告存放路径,支持相对路径。
+    fp = file(filename, 'wb')
+    runner = Demo.HTMLTestRunner(stream=fp, title='Report_title',
+                                 description='Report_description')  # 使用HTMLTestRunner配置参数,输出报告路径、报告标题、描述
+    runner.run(testunit)  # 自动进行测试

+ 7 - 0
Demo/hellow python.py

@@ -0,0 +1,7 @@
+#!/usr/bin/pyton
+# -*- coding:UTF-8 -*=
+# print "你好,python"
+
+
+
+

+ 84 - 0
Demo/login.py

@@ -0,0 +1,84 @@
+#encoding:utf-8
+import os
+import time
+import unittest
+from time import sleep
+
+from appium import webdriver
+
+PATH = lambda p: os.path.abspath(
+    os.path.join(os.path.dirname(__file__), p)
+)
+
+class TongyinPerson(unittest.TestCase):
+    appcount=1
+
+    def setUp(self):
+        print '\n-------- Prepare To Start --------'
+        desired_caps = {}
+        desired_caps['platformName'] = 'Android'
+        desired_caps['platformVersion'] = '6.0'
+        desired_caps['deviceName'] = 'M9N7N15104001905'
+        #desired_caps['app'] = PATH('./hjy-family-3.1.3.apk')
+        desired_caps['appPackage'] = ''
+        desired_caps['appActivity'] = 'com.djt.personreadbean.login.StartAnimalAct'
+        desired_caps['unicodeKeyboard'] = True
+        desired_caps['resetKeyboard'] = True
+        
+        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
+
+
+    def test_script(self):
+        sleep(4)
+        timepoint = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
+        app_num=['15310000001','1531123456789','15310000001','15899999991']
+        app_pwd=['000001','123456','1','999991']
+        for i in range(4):
+            num=app_num[i]
+            pwd=app_pwd[i]
+            try:
+                print '\n-------- %d time(s) Running... --------'%TongyinPerson.appcount
+
+                textfields = self.driver.find_elements_by_class_name("android.widget.EditText")
+                textfields[0].send_keys(num)
+                textfields[1].send_keys(pwd)
+                sleep(1)
+                print 'note:the account is :',num,' ,the password is :',pwd
+                sleep(1)
+                self.driver.find_element_by_id("com.djt.personreadbean:id/btn_login").click()                
+                self.driver.get_screenshot_as_file("E:\\report\\screenshot\\screen_"+timepoint+".png")
+            except:
+                print '-------- Have been logged! --------'
+                self.driver.get_screenshot_as_file("E:\\report\\screenshot\\log_screen_"+timepoint+".png")
+            try:#判断宝贝
+                sleep(1)
+                self.driver.find_element_by_xpath("//android.widget.RelativeLayout/android.widget.ListView/android.widget.RelativeLayout[2]").click()
+                sleep(1)
+            except:
+                print '------ Only one Baby ------'
+            sleep(6)
+            try:
+                sleep(3)
+                self.driver.find_element_by_name(u"更多").click()
+                sleep(2)
+                self.driver.find_element_by_name(u"注销").click()
+                sleep(2)
+                self.driver.find_element_by_name(u"是").click()
+                sleep(8)
+            except:
+                print '-------- account or password is wrong! --------'
+                print '-------- Please sign in first --------'
+            print '-------- OVER --------\n'
+            TongyinPerson.appcount += 1
+        self.driver.quit()
+
+        
+if __name__ == '__main__':
+    suite=unittest.TestSuite()
+    suite.addTest(TongyinPerson("test_script"))
+    timestr = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
+    filename="E:\\report\\report_"+timestr+".html"
+    fp = file(filename,"wb")
+    runner = Demo.HTMLTestRunner(stream=fp, title=u'登录测试报告', description=u'测试用例详情')
+    runner.run(suite)
+    fp.close() 

+ 0 - 0
MyTest/__init__.py


+ 191 - 0
MyTest/moaTest.py

@@ -0,0 +1,191 @@
+# -*- coding: utf-8 -*-
+import os,unittest,copy
+from appium import webdriver
+from time import sleep
+PATH = lambda p: os.path.abspath(
+    os.path.join(os.path.dirname(__file__), p)
+)
+
+# desired_caps = {}
+# desired_caps['platformName'] = 'Android'
+# desired_caps['platformVersion'] = '4.2.3'
+# desired_caps['deviceName'] = '7bbe99db'
+# # desired_caps['app']=PATH('D:\AutoTest\ppp\winsoft.apk')
+# desired_caps['appPackage'] = 'cn.wswin.moa'
+# desired_caps['appActivity'] = '.ui.activity.SplashActivity'
+# desired_caps['unicodeKeyboard'] = True
+# desired_caps['resetKeyboard'] = True
+#
+# driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
+
+#捕获异常
+def elementIsExit(self,element):
+        try:
+            self.driver.find_element_by_name(element)
+        except BaseException,e:
+            print e
+            return False
+        return True
+
+def changeListTree(listTree):
+    listTreeName = []
+    for i in  listTree:
+        listTreeName.append(i.text)
+    return listTreeName
+
+def listIsDif(newList,oldList):
+    newListName = changeListTree(newList)
+    oldListName = changeListTree(oldList)
+    # newListName中有而oldListName中没有的
+    difListName = list(set(newListName).difference(set(oldListName)))
+    print difListName
+    print '不同路径的长度',len(difListName)
+    return difListName
+
+#找人
+def findOne(self,lookfor,topTree):
+    findflag = False
+    copyTreeName = changeListTree(topTree)
+    toptreeCount = topTree.__len__()
+    for onetree in copyTreeName:
+        num = copyTreeName.index(onetree)
+        currenttreeName = copyTreeName[num]
+        if elementIsExit(self, currenttreeName):
+            self.driver.find_element_by_name(currenttreeName).click()
+            print '程序点击了该路径:', currenttreeName
+        while True:
+            otherTree = self.driver.find_elements_by_id('cn.wswin.moa:id/tv_item_tree_parent')
+            if elementIsExit(self, lookfor):
+                print '程序在该路径下找人:', lookfor
+                findflag = True
+                # self.driver.find_element_by_name(lookfor).click()
+                break
+            elif len(listIsDif(otherTree, topTree)) > 0:
+                print '发现新的路径:', otherTree
+                findOne(self, lookfor, otherTree)
+            elif num < (toptreeCount - 1):
+                nexttreeName = copyTreeName[num + 1]
+                print '要查看的下一个路径名称:', nexttreeName
+                if elementIsExit(self, nexttreeName):
+                    break
+                else:
+                    print '查询不到下一个路径,需要滑动'
+                    self.driver.swipe(710, 1000, 710, 200)  # 往下滑动当前页
+            else:
+                print '结束查找'
+                break
+    print '出结果了要'
+    return findflag
+# def scanOne(self, target, lookfor):
+#     topTree = self.driver.find_elements_by_id('cn.wswin.moa:id/tv_item_tree_parent')  # 后期用target替换
+#     toptreeCount = topTree.__len__()
+#     # opentree.driver.find_element_by_name(parentTree[0].text).click()
+#     count = toptreeCount - 1
+#     for onetree in topTree:
+#         self.driver.find_element_by_name(onetree.text).click()
+#         while True:
+#             if elementIsExit(self, lookfor):
+#                 self.driver.find_element_by_name(lookfor).click()
+#                 # sleep(5)
+#                 break
+#             elif elementIsExit(self, topTree[(topTree.index(onetree) + 1)].text):
+#                 break
+#             else:
+#                 self.driver.swipe(680, 1000, 680, 200)  # 往下滑动当前页
+
+class PYtest(unittest.TestCase):
+    @classmethod
+    def setUpClass(self):
+        print('--------------start App-------------')
+        desired_caps = {}
+        desired_caps['platformName'] = 'Android'
+        desired_caps['platformVersion'] = '4.3'
+        desired_caps['deviceName'] = '7bbe99db'
+        # desired_caps['app']=PATH('D:\AutoTest\ppp\winsoft.apk')
+        desired_caps['appPackage'] = 'cn.wswin.moa'
+        desired_caps['appActivity'] = '.ui.activity.SplashActivity'
+        # desired_caps['appActivity'] = '.ui.activity.MainActivity'
+        desired_caps['unicodeKeyboard'] = True
+        desired_caps['resetKeyboard'] = True
+        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
+        self.driver.implicitly_wait(5)#全局方法最长超时时间
+
+    @classmethod
+    def py_login(login):#登录测试用例
+        #忽略引导页存在,手动去掉引导页之后再进行以下所有测试用例
+        sleep(2)
+        current_Act = login.driver.current_activity
+        print current_Act
+        if current_Act == '.ui.activity.LoginActivity':
+            print ('login App')
+            account = login.driver.find_element_by_id('cn.wswin.moa:id/e_user_name')
+            password = login.driver.find_element_by_id('cn.wswin.moa:id/e_user_password')
+            btn_login = login.driver.find_element_by_name('登录')
+            account.clear()
+            account.send_keys('hgl')
+            password.clear()
+            password.send_keys('hegl123456')
+            btn_login.click()
+            print ('login App passed')
+        elif current_Act =='.ui.activity.MainActivity':
+            print ('app is login')
+        else:
+            print ('不知道你在哪个页面')
+
+    def py_quitApp(quit):#退出APP
+        sleep(2)
+        current_Act= quit.driver.current_activity
+        print current_Act
+        if current_Act == '.ui.activity.MainActivity':
+            print('quit App')
+            btn_left = quit.driver.find_element_by_class_name('android.widget.ImageButton')#最好不要在判断之前提前定义,会因为找不到对象而报错
+            if btn_left.is_enabled():
+                btn_left.click()
+                btn_quit = quit.driver.find_element_by_name('退出')
+            if btn_quit.is_enabled():
+                btn_quit.click()
+                btn_sure = quit.driver.find_element_by_name('确认')
+            if btn_sure.is_enabled():
+               btn_sure.click()
+        print('quit App passed')
+
+    def py_openTree2(opentree):
+        current_Act = opentree.driver.current_activity
+        print current_Act
+        if current_Act == '.ui.activity.MainActivity':
+            sleep(2)
+            opentree.driver.tap([(333, 1224)])  # 此处定位在联系人界面
+        if elementIsExit(opentree,'联系人'):
+            print ('当前页面位置:联系人界面')
+            topTree = opentree.driver.find_elements_by_id('cn.wswin.moa:id/tv_item_tree_parent')  # 后期用target替换
+            if findOne(opentree, '王巧巧', topTree):
+                print '找到人了'
+
+    def finishDriver(self):
+        print('finish Driver')
+        self.driver.quit()
+        print('finish Driver  passed')
+
+    def py_Clicktap1(self):#用例点击事件
+        self.driver.find_element_by_name('在吗').click()
+        print('Click Passed')
+
+    def py_Swiap(self):
+        self.driver.swipe(720,700,0,700)
+        print ('Swip Passed')
+
+if __name__ == '__main__':
+    suite = unittest.TestSuite()
+    #需要测试的用例就addTest,不加的就不会运行
+    # suite.addTest(PYtest('py_Swiap'))
+    suite.addTest(PYtest('py_login'))#APP登录
+    suite.addTest(PYtest('py_openTree2'))
+    # suite.addTest(PYtest('py_quitApp'))#APP登出
+    suite.addTest(PYtest('finishDriver'))#结束测试
+    unittest.TextTestRunner(verbosity=1).run(suite)
+    # timestr = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
+    # filename = "D:\\AutoTest\\report\\report_" + timestr + ".html"
+    # fp = file(filename, "wb")
+    # runner =HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'测试用例详情')
+    # runner.run(suite)
+    # fp.close()

+ 49 - 0
MyTest/qqTest.py

@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+from appium import webdriver#倒入 webdriver
+import os,time,unittest,HTMLTestRunner#倒入库
+
+class apptestlogin(unittest.TestCase):
+    def setUp(self):#初始化
+        self.desired_caps={}
+        self.desired_caps['platformName'] = 'Android'
+        self.desired_caps['deviceName']='7bbe99db'
+        self.desired_caps['preformVersion']='4.3'
+        self.desired_caps['appPackage']  ='com.tencent.mobileqq'
+        self.desired_caps['appActivity']  ='.activity.SplashActivity'
+        self.driver=webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)#启动 app
+        self.driver.implicitly_wait(1)  # 全局方法最长超时时间
+
+    def tearDown(self):#还原测试环境
+        self.driver.find_element_by_id('com.tencent.mobileqq:id/conversation_head').click()
+        self.driver.find_element_by_id('com.tencent.mobileqq:id/settings').click()
+        self.driver.find_element_by_id('com.tencent.mobileqq:id/account_switch').click()
+        self.driver.find_element_by_id('com.tencent.mobileqq:id/logoutBtn').click()
+        self.driver.find_element_by_id('com.tencent.mobileqq:id/dialogRightBtn').click()
+        self.driver.quit()
+
+    def testLogin1(self):  # 测试用例
+        self.driver.find_element_by_id('com.tencent.mobileqq:id/btn_login').click()#登录,定位方式 id
+        # time.sleep(2)
+        me = self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("QQ")')# 定位输入qq号,使用uiautomator定位
+        me.clear() # 输入框输入前最好先清空下
+        me.send_keys('121354090')
+        password = self.driver.find_element_by_id('com.tencent.mobileqq:id/password')
+        password.clear()
+        password.send_keys('xxx..')
+        self.driver.find_element_by_id('com.tencent.mobileqq:id/login').click()#点击登录
+        m = self.driver.find_element_by_id('com.tencent.mobileqq:id/conversation_head')
+        if m is not None:
+            print('login is sucess')
+        else:
+            print('login is Flase')
+            print(self.driver.find_element_by_id('com.tencent.mobileqq:id/dialogText ').text)
+
+if __name__ == '__main__':
+    suiteTest = unittest.TestSuite()
+    suiteTest.addTest(apptestlogin("testLogin1"))
+    unittest.TextTestRunner(verbosity=1).run(suiteTest)
+    # now = time.strftime('%Y-%m%d', time.localtime(time.time()))
+    # report_dir = r'%s.html' % now
+    # re_open = open(report_dir, 'wb')
+    # runner = HTMLTestRunner.HTMLTestRunner(stream=re_open, title = 'QQ 测试', description = '测试结果')
+    # runner.run(suiteTest)

+ 252 - 0
MyTest/test_HTMLTestRunner.py

@@ -0,0 +1,252 @@
+# -*- coding: utf-8 -*-
+
+import StringIO
+import sys
+import unittest
+
+import HTMLTestRunner
+
+# ----------------------------------------------------------------------
+
+def safe_unicode(obj, *args):
+    """ return the unicode representation of obj """
+    try:
+        return unicode(obj, *args)
+    except UnicodeDecodeError:
+        # obj is byte string
+        ascii_text = str(obj).encode('string_escape')
+        return unicode(ascii_text)
+
+def safe_str(obj):
+    """ return the byte string representation of obj """
+    try:
+        return str(obj)
+    except UnicodeEncodeError:
+        # obj is unicode
+        return unicode(obj).encode('unicode_escape')
+
+# ----------------------------------------------------------------------
+# Sample tests to drive the HTMLTestRunner
+
+class SampleTest0(unittest.TestCase):
+    """ A class that passes.
+
+    This simple class has only one test case that passes.
+    """
+    def __init__(self, methodName):
+        unittest.TestCase.__init__(self, methodName)
+
+    def test_pass_no_output(self):
+        """        test description
+        """
+        pass
+
+class SampleTest1(unittest.TestCase):
+    """ A class that fails.
+
+    This simple class has only one test case that fails.
+    """
+    def test_fail(self):
+        """
+        test description (鎻忚堪)
+        """
+        self.fail()
+
+class SampleOutputTestBase(unittest.TestCase):
+    """ Base TestCase. Generates 4 test cases x different content type. """
+    def test_1(self):
+        print self.MESSAGE
+    def test_2(self):
+        print >>sys.stderr, self.MESSAGE
+    def test_3(self):
+        self.fail(self.MESSAGE)
+    def test_4(self):
+        raise RuntimeError(self.MESSAGE)
+
+class SampleTestBasic(SampleOutputTestBase):
+    MESSAGE = 'basic test'
+
+class SampleTestHTML(SampleOutputTestBase):
+    MESSAGE = 'the message is 5 symbols: <>&"\'\nplus the HTML entity string: [&copy;] on a second line'
+
+class SampleTestLatin1(SampleOutputTestBase):
+    MESSAGE = u'the message is 2345'.encode('latin-1')
+
+class SampleTestUnicode(SampleOutputTestBase):
+    u""" Unicode (绲变竴纰�) test """
+    MESSAGE = u'the message is \u8563'
+    # 2006-04-25 Note: Exception would show up as
+    # AssertionError: <unprintable instance object>
+    #
+    # This seems to be limitation of traceback.format_exception()
+    # Same result in standard unittest.
+    def test_pass(self):
+        u""" A test with Unicode (绲变竴纰�) docstring """
+        pass
+
+
+# ------------------------------------------------------------------------
+# This is the main test on HTMLTestRunner
+
+class Test_HTMLTestRunner(unittest.TestCase):
+
+    def test0(self):
+        self.suite = unittest.TestSuite()
+        buf = StringIO.StringIO()
+        runner = HTMLTestRunner.HTMLTestRunner(buf)
+        runner.run(self.suite)
+        # didn't blow up? ok.
+        self.assert_('</html>' in buf.getvalue())
+
+    def test_main(self):
+        # Run HTMLTestRunner. Verify the HTML report.
+
+        # suite of TestCases
+        self.suite = unittest.TestSuite()
+        self.suite.addTests([
+            unittest.defaultTestLoader.loadTestsFromTestCase(SampleTest0),
+            unittest.defaultTestLoader.loadTestsFromTestCase(SampleTest1),
+            unittest.defaultTestLoader.loadTestsFromTestCase(SampleTestBasic),
+            unittest.defaultTestLoader.loadTestsFromTestCase(SampleTestHTML),
+            unittest.defaultTestLoader.loadTestsFromTestCase(SampleTestLatin1),
+            unittest.defaultTestLoader.loadTestsFromTestCase(SampleTestUnicode),
+            ])
+
+        # Invoke TestRunner
+        buf = StringIO.StringIO()
+        #runner = unittest.TextTestRunner(buf)       #DEBUG: this is the unittest baseline
+        runner = HTMLTestRunner.HTMLTestRunner(
+                    stream=buf,
+                    title='<Demo Test>',
+                    description='This demonstrates the report output by HTMLTestRunner.'
+                    )
+        runner.run(self.suite)
+
+        # Define the expected output sequence. This is imperfect but should
+        # give a good sense of the well being of the test.
+        EXPECTED = u"""
+Demo Test
+
+>SampleTest0:
+
+>SampleTest1:
+
+>SampleTestBasic
+>test_1<
+>pass<
+basic test
+
+>test_2<
+>pass<
+basic test
+
+>test_3<
+>fail<
+AssertionError: basic test
+
+>test_4<
+>error<
+RuntimeError: basic test
+
+
+>SampleTestHTML
+>test_1<
+>pass<
+'the message is 5 symbols: \\x3C\\x3E\\x26\\"\\'\\n
+plus the HTML entity string: [\\x26copy;] on a second line
+
+>test_2<
+>pass<
+'the message is 5 symbols: \\x3C\\x3E\\x26\\"\\'\\n
+plus the HTML entity string: [\\x26copy;] on a second line
+
+>test_3<
+>fail<
+AssertionError: the message is 5 symbols: \\x3C\\x3E\\x26\\"\\'\\n
+plus the HTML entity string: [\\x26copy;] on a second line
+
+>test_4<
+>error<
+RuntimeError: the message is 5 symbols: \\x3C\\x3E\\x26\\"\\'\\n
+plus the HTML entity string: [\\x26copy;] on a second line
+
+
+>SampleTestLatin1
+>test_1<
+>pass<
+the message is 谩茅铆贸煤
+
+>test_2<
+>pass<
+the message is 谩茅铆贸煤
+
+>test_3<
+>fail<
+AssertionError: the message is 谩茅铆贸煤
+
+>test_4<
+>error<
+RuntimeError: the message is 谩茅铆贸煤
+
+
+>SampleTestUnicode
+>test_1<
+>pass<
+the message is \u8563
+
+>test_2<
+>pass<
+the message is \u8563
+
+>test_3<
+>fail<
+AssertionError: \\x3Cunprintable instance object\\x3E
+
+>test_4<
+>error<
+RuntimeError: \\x3Cunprintable instance object\\x3E
+
+Total
+>19<
+>10<
+>5<
+>4<
+</html>
+"""
+        # check out the output
+        byte_output = buf.getvalue()
+        # output the main test output for debugging & demo
+        print byte_output
+        # HTMLTestRunner pumps UTF-8 output
+        output = byte_output.decode('utf-8')
+        self._checkoutput(output,EXPECTED)
+
+
+    def _checkoutput(self,output,EXPECTED):
+        i = 0
+        for lineno, p in enumerate(EXPECTED.splitlines()):
+            if not p:
+                continue
+            j = output.find(p,i)
+            if j < 0:
+                self.fail(safe_str('Pattern not found lineno %s: "%s"' % (lineno+1,p)))
+            i = j + len(p)
+
+
+
+
+##############################################################################
+# Executing this module from the command line
+##############################################################################
+
+import unittest
+if __name__ == "__main__":
+    if len(sys.argv) > 1:
+        argv = sys.argv
+    else:
+        argv=['test_HTMLTestRunner.py', 'Test_HTMLTestRunner']
+    unittest.main(argv=argv)
+    # Testing HTMLTestRunner with HTMLTestRunner would work. But instead
+    # we will use standard library's TextTestRunner to reduce the nesting
+    # that may confuse people.
+    #HTMLTestRunner.main(argv=argv)

+ 1 - 0
common/errorStatus.py

@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-

+ 1 - 0
common/utility.py

@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-