This commit is contained in:
dennis00010011b@gmail.com 2018-02-13 19:21:10 -08:00
commit 2420c7517f
64 changed files with 5730 additions and 0 deletions

68
.circleci/config.yml Normal file
View File

@ -0,0 +1,68 @@
version: 2
jobs:
build:
working_directory: ~/ddd
docker:
- image: circleci/node:latest-browsers
steps:
- checkout
- run: strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC
- run: npm install
- run: node -v
- run: npm -v
- run: google-chrome --version
- run: chromedriver -v
- run:
name: Creating Artifacts
command: |
sudo echo "my artifact file" > ~/ddd/artifact-1;
# sudo mkdir ~/ddd/artifacts;
# sudo echo "my artifact files in a dir" > ~/ddd/artifacts/artifact-2;
#- run:
# command: |
# cd /
#
# sudo mkdir -p /etc/opt/chrome/policies/managed
# cd ~/ddd
# ls -l
# sudo cp test_policy.json /etc/opt/chrome/policies/managed
# cd /etc/opt/chrome/policies/managed
# ls -l
# cat test_policy.json
# - run: google-chrome
# - run: sudo killall chrome
# - run: sudo mkdir /1 # sudo cp test_policy.json /etc/opt/chrome/policies/managed
#- run: cd /1
test:
docker:
- image: circleci/node:latest-browsers
working_directory: ~/ddd
steps:
- checkout
- run: node index.js
- store_artifacts:
path: ~/ddd/artifacts
destination: artifact-file
- store_artifacts:
path: ~/ddd/artifacts
#- run:
workflows:
version: 2
build_and_test:
jobs:
- build
- test:
requires:
- build

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
node_modules
tempAddr.txt
results
artifacts

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptLibraryMappings">
<includedPredefinedLibrary name="Node.js Core" />
</component>
</project>

6
.idea/misc.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
</project>

8
.idea/modules.xml Normal file
View File

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

View File

@ -0,0 +1,11 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="index" type="NodeJSConfigurationType" factoryName="Node.js" path-to-js-file="index.js" working-dir="$PROJECT_DIR$">
<envs>
<env name="DEBUG" value="wizardAutomation:*" />
</envs>
<EXTENSION ID="com.jetbrains.nodejs.run.NodeJSStartBrowserRunConfigurationExtension">
<browser url="http://localhost:3000/" />
</EXTENSION>
<method />
</configuration>
</component>

4
.idea/watcherTasks.xml Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectTasksOptions" suppressed-tasks="Babel" />
</project>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

544
.idea/workspace.xml Normal file
View File

@ -0,0 +1,544 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="40b9626d-5f4f-46c4-8096-7de331aaa15a" name="Default" comment="" />
<ignored path="$PROJECT_DIR$/.tmp/" />
<ignored path="$PROJECT_DIR$/temp/" />
<ignored path="$PROJECT_DIR$/tmp/" />
<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="FileEditorManager">
<leaf>
<file leaf-file-name="Owner.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/entity/Owner.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="143">
<caret line="52" column="0" lean-forward="true" selection-start-line="52" selection-start-column="0" selection-end-line="52" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Test2.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/tests/Test2.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="450">
<caret line="43" column="27" lean-forward="true" selection-start-line="43" selection-start-column="27" selection-end-line="43" selection-end-column="27" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Page.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/pages/Page.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="32" column="52" lean-forward="false" selection-start-line="32" selection-start-column="52" selection-end-line="32" selection-end-column="52" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="InvestPage.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/pages/InvestPage.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="339">
<caret line="29" column="0" lean-forward="false" selection-start-line="29" selection-start-column="0" selection-end-line="29" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Currency.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/entity/Currency.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2070">
<caret line="115" column="63" lean-forward="false" selection-start-line="115" selection-start-column="63" selection-end-line="115" selection-end-column="63" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="MetaMask.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/pages/MetaMask.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="918">
<caret line="180" column="97" lean-forward="false" selection-start-line="180" selection-start-column="97" selection-end-line="180" selection-end-column="97" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Test1.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/tests/Test1.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="125">
<caret line="30" column="16" lean-forward="false" selection-start-line="30" selection-start-column="16" selection-end-line="30" selection-end-column="16" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Crowdsale.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/entity/Crowdsale.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="7" column="5" lean-forward="true" selection-start-line="7" selection-start-column="5" selection-end-line="7" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Test3.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/tests/Test3.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="177">
<caret line="29" column="46" lean-forward="true" selection-start-line="29" selection-start-column="46" selection-end-line="29" selection-end-column="46" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="index.js" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="231">
<caret line="65" column="0" lean-forward="true" selection-start-line="65" selection-start-column="0" selection-end-line="65" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="JavaScript File" />
</list>
</option>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>wallet</find>
</findStrings>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/package.json" />
<option value="$PROJECT_DIR$/entity/User.js" />
<option value="$PROJECT_DIR$/owners/owner1.json" />
<option value="$PROJECT_DIR$/entity/Currency.js" />
<option value="$PROJECT_DIR$/pages/WizardStep3.js" />
<option value="$PROJECT_DIR$/pages/TransactionPage.js" />
<option value="$PROJECT_DIR$/pages/WizardStep4.js" />
<option value="$PROJECT_DIR$/scenarios/T1RnWy.json" />
<option value="$PROJECT_DIR$/pages/MetaMask.js" />
<option value="$PROJECT_DIR$/pages/CrowdsalePage.js" />
<option value="$PROJECT_DIR$/entity/Crowdsale.js" />
<option value="$PROJECT_DIR$/pages/InvestPage.js" />
<option value="$PROJECT_DIR$/tests/Test3.js" />
<option value="$PROJECT_DIR$/tests/Test1.js" />
<option value="$PROJECT_DIR$/pages/Page.js" />
<option value="$PROJECT_DIR$/entity/Owner.js" />
<option value="$PROJECT_DIR$/index.js" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER">
<package-json value="$PROJECT_DIR$/package.json" />
</component>
<component name="JsFlowSettings">
<service-enabled>true</service-enabled>
<exe-path />
<other-services-enabled>true</other-services-enabled>
<auto-save>true</auto-save>
</component>
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="NodeModulesDirectoryManager">
<handled-path value="$PROJECT_DIR$/node_modules" />
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="122" />
<option name="y" value="3" />
<option name="width" value="1220" />
<option name="height" value="499" />
</component>
<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>
<expand>
<path>
<item name="wizardAutomation" type="b2602c69:ProjectViewProjectNode" />
<item name="wizardAutomation" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="wizardAutomation" type="b2602c69:ProjectViewProjectNode" />
<item name="wizardAutomation" type="462c0819:PsiDirectoryNode" />
<item name="entity" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="wizardAutomation" type="b2602c69:ProjectViewProjectNode" />
<item name="wizardAutomation" type="462c0819:PsiDirectoryNode" />
<item name="owners" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="wizardAutomation" type="b2602c69:ProjectViewProjectNode" />
<item name="wizardAutomation" type="462c0819:PsiDirectoryNode" />
<item name="pages" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="wizardAutomation" type="b2602c69:ProjectViewProjectNode" />
<item name="wizardAutomation" type="462c0819:PsiDirectoryNode" />
<item name="tests" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="wizardAutomation" type="b2602c69:ProjectViewProjectNode" />
<item name="wizardAutomation" type="462c0819:PsiDirectoryNode" />
<item name="utils" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scope" />
<pane id="Scratches" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/index.js" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="nodejs_interpreter_path" value="node" />
<property name="javascript.nodejs.core.library.configured.version" value="8.9.4" />
<property name="HbShouldOpenHtmlAsHb" value="" />
<property name="settings.editor.selected.configurable" value="Settings.JavaScript" />
<property name="JavaScriptWeakerCompletionTypeGuess" value="true" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="40b9626d-5f4f-46c4-8096-7de331aaa15a" name="Default" comment="" />
<created>1518556474417</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1518556474417</updated>
<workItem from="1518556481423" duration="17461000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="17461000" />
</component>
<component name="ToolWindowManager">
<frame x="47" y="-4" width="1319" height="772" extended-state="6" />
<editor active="true" />
<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.15277778" 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="Docker" 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="-1" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" 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="true" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32868218" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.33333334" sideWeight="0.5" order="2" 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="-1" side_tool="false" content_ui="tabs" />
<window_info id="npm" 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="-1" side_tool="true" 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.32868218" sideWeight="0.5" order="-1" side_tool="false" 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.4" sideWeight="0.5" order="3" 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="-1" side_tool="true" 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="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="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="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="version" value="1" />
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="1" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="216">
<caret line="12" column="0" lean-forward="false" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/entity/User.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="7" column="25" lean-forward="false" selection-start-line="7" selection-start-column="25" selection-end-line="7" selection-end-column="25" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/BaseTest.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162">
<caret line="9" column="19" lean-forward="false" selection-start-line="9" selection-start-column="19" selection-end-line="9" selection-end-column="19" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config.json">
<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" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/scenarios/T1RnWn_0005.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="9" column="0" lean-forward="false" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/testAccounts.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="54">
<caret line="3" column="55" lean-forward="false" selection-start-line="3" selection-start-column="13" selection-end-line="3" selection-end-column="55" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/entity/Tier.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="216">
<caret line="12" column="25" lean-forward="false" selection-start-line="12" selection-start-column="25" selection-end-line="12" selection-end-column="25" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/entity/MetaMaskWallet.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-198">
<caret line="7" column="19" lean-forward="false" selection-start-line="7" selection-start-column="19" selection-end-line="7" selection-end-column="19" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/views/error.jade">
<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" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/routes/index.js">
<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" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/public/stylesheets/style.css">
<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" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/utils/Utils.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="90" column="68" lean-forward="false" selection-start-line="90" selection-start-column="68" selection-end-line="90" selection-end-column="68" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/scenarios/T1RnWy.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="414">
<caret line="23" column="29" lean-forward="false" selection-start-line="23" selection-start-column="29" selection-end-line="23" selection-end-column="29" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pages/TransactionPage.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="5" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pages/WizardStep3.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="234">
<caret line="19" column="0" lean-forward="false" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pages/WizardStep4.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="54">
<caret line="9" column="32" lean-forward="true" selection-start-line="9" selection-start-column="32" selection-end-line="9" selection-end-column="32" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pages/TierPage.js">
<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" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/owners/owner1.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="36">
<caret line="2" column="81" lean-forward="false" selection-start-line="2" selection-start-column="17" selection-end-line="2" selection-end-column="81" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/entity/Currency.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2070">
<caret line="115" column="63" lean-forward="false" selection-start-line="115" selection-start-column="63" selection-end-line="115" selection-end-column="63" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pages/MetaMask.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="918">
<caret line="180" column="97" lean-forward="false" selection-start-line="180" selection-start-column="97" selection-end-line="180" selection-end-column="97" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pages/CrowdsalePage.js">
<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" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pages/InvestPage.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="339">
<caret line="29" column="0" lean-forward="false" selection-start-line="29" selection-start-column="0" selection-end-line="29" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/Test3.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="177">
<caret line="29" column="46" lean-forward="true" selection-start-line="29" selection-start-column="46" selection-end-line="29" selection-end-column="46" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/entity/Crowdsale.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="7" column="5" lean-forward="true" selection-start-line="7" selection-start-column="5" selection-end-line="7" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pages/Page.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="32" column="52" lean-forward="false" selection-start-line="32" selection-start-column="52" selection-end-line="32" selection-end-column="52" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/Test1.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="125">
<caret line="30" column="16" lean-forward="false" selection-start-line="30" selection-start-column="16" selection-end-line="30" selection-end-column="16" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/entity/Owner.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="143">
<caret line="52" column="0" lean-forward="true" selection-start-line="52" selection-start-column="0" selection-end-line="52" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/Test2.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="450">
<caret line="43" column="27" lean-forward="true" selection-start-line="43" selection-start-column="27" selection-end-line="43" selection-end-column="27" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="231">
<caret line="65" column="0" lean-forward="true" selection-start-line="65" selection-start-column="0" selection-end-line="65" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</component>
</project>

BIN
MetaMask.crx Normal file

Binary file not shown.

12
NetworksCode.txt Normal file
View File

@ -0,0 +1,12 @@
0: Olympic, Ethereum public pre-release testnet
1: Frontier, Homestead, Metropolis, the Ethereum public main network
1: Classic, the (un)forked public Ethereum Classic main network, chain ID 61
1: Expanse, an alternative Ethereum implementation, chain ID 2
2: Morden, the public Ethereum testnet, now Ethereum Classic testnet
3: Ropsten, the public cross-client Ethereum testnet
4: Rinkeby, the public Geth PoA testnet
42: Kovan, the public Parity PoA testnet
77: Sokol, the public POA Network testnet, https://sokol.poa.network
99: Core, the public POA Network main network,https://core.poa.network
7762959: Musicoin, the music blockchain
8545:localhost8545

144
README.md Normal file
View File

@ -0,0 +1,144 @@
## Scrypt for creating new crowdsale https://wizard.poa.network/
v 1.0.35 Added testing scenarios: ./scenarios
v 1.0.38 Added executable files
## Getting Started
### Installation
```
https://github.com/poanetwork/e2e-test-token-wizard
```
```
npm install create-poa-crowdsale
```
### Usage
```
const CreatePOACrowdsale=require('create-poa-crowdsale');
const createPOACrowdsale=CreatePOACrowdsale.createPOACrowdsale;
var myCrowdsale=createPOACrowdsale( "config.json");
```
where:
* ```config.json``` is _.json_ file in working directory (see example below) with configuration parameters.
### Package includes executable files
* ```index-linux``` for Linux
* ```index-macos``` for macOS
* ```index-windows``` for Windows
run with command ```./<file_name>```
local directory should contain ```config.json```, ```scenario.json```, ```MetaMask.crx```
### Prerequisites
* Google-chrome browser should be installed
## Scrypt performs:
* open pre-installed Chrome browser
* install MetaMask Chrome extension: https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en
* activate MetaMask with given account number,private key and network. Data from ```config.json```
* go through Token Wizard with given data in ```scenario file``` (field "scenario" in ```config.json```)
* save result's files in ```./result*``` , folder will be created
* package includes the file ```./circleci/config.yml``` for CI server: https://circleci.com/
### Example ```config.json```:
```
{
"startURL" : "https://wizard.poa.network/",
"installMetaMask":true,
"scenario":"T1RnWn.json"
}
```
### Example ```scenario.json```:
```
{
"account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "MySuperCoin",
"ticker": "MSC",
"decimals": 0,
"reservedTokens":[
{
"address" :"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"dimension": "percentage",
"value": 20
},
{
"address" :"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"dimension": "tokens",
"value": 10
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 100,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/07/2018",
"startTime": "4:40pm",
"endDate":"02/07/2018",
"endTime":"8:00pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###2",
"allowModify": true,
"startDate": "08/08/2019",
"startTime": "2:34am",
"endDate":"08/10/2019",
"endTime":"11:34pm",
"rate":40,
"supply": 2300,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}
```
where networkID=
```
0,1,2 - Main Ethereum network;
3 - Ropsten;
4 - Rinkeby;
42 - Kovan;
77 - Sokol;
99 - Poa core;
8545 - localhost 8545
```

90
bin/www Executable file
View File

@ -0,0 +1,90 @@
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('wizardautomation:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}

5
config.json Normal file
View File

@ -0,0 +1,5 @@
{
"startURL" : "https://wizard.poa.network/",
"installMetaMask":true,
"scenario":"./scenarios/T2RnWyMy_0016.json"
}

11
entity/Crowdsale.js Normal file
View File

@ -0,0 +1,11 @@
class Crowdsale {
constructor(currency,tokenAddress,contractAddress,url){
this.currency=currency;
this.tokenAddress=tokenAddress;
this.contractAddress=contractAddress;
this.url=url;
}
}
module.exports.Crowdsale=Crowdsale;

134
entity/Currency.js Normal file
View File

@ -0,0 +1,134 @@
console.log(module.filename);
const fs = require('fs');
const tier=require('./Tier.js');
const Tier=tier.Tier;
const reservedTokens=require('./ReservedTokens.js');
const ReservedTokens=reservedTokens.ReservedTokens;
const whitelist=require('./Whitelist.js');
const Whitelist=whitelist.Whitelist;
class Currency{
constructor()
{
this.name;
this.ticker;
this.walletAddress;
this.reservedTokens=[];
this.whitelist=[];
this.gasPrice;
this.minCap;
this.whitelisting=false;
this.tiers=[];
}
static createCurrency(fileName){
var c=new Currency();
c.parser(fileName);
return c;
}
parser(fileName){
console.log(fileName);
var obj=JSON.parse(fs.readFileSync(fileName,"utf8"));
this.name=obj.name;
this.ticker=obj.ticker;
this.decimals=obj.decimals;
for (var i=0;i<obj.reservedTokens.length;i++)
{
this.reservedTokens.push(
new ReservedTokens(
obj.reservedTokens[i].address,
obj.reservedTokens[i].dimension,
obj.reservedTokens[i].value
)
)
}
this.walletAddress=obj.walletAddress;
this.gasPrice=obj.gasprice;
this.minCap=obj.mincap;
this.whitelisting=obj.whitelisting;
for (var i=0;i<obj.tiers.length;i++)
{
var wh;
if (this.whitelisting) wh=obj.tiers[i].whitelist;
else wh=null;
this.tiers.push(
new Tier(obj.tiers[i].name,
obj.tiers[i].allowModify,
obj.tiers[i].rate,
obj.tiers[i].supply,
obj.tiers[i].startTime,
obj.tiers[i].startDate,
obj.tiers[i].endTime,
obj.tiers[i].endDate,
wh
)
)
}
}
print(){
console.log("name :"+this.name);
console.log("ticker :"+this.ticker);
console.log("decimals:"+this.decimals);
console.log("Reserved Tokens:"+this.reservedTokens.length);
for (var i=0;i<this.reservedTokens.length;i++)
{
console.log("reserved tokens#:"+i);
console.log("Address:"+this.reservedTokens[i].address);
console.log("Dimension:"+this.reservedTokens[i].dimension);
console.log("Value:"+this.reservedTokens[i].value);
}
console.log("Whitelisting:"+this.whitelisting);
console.log("WalletAddress:"+this.walletAddress);
console.log("gasprice:"+this.gasPrice);
console.log("mincap:"+this.minCap);
console.log("Number of tiers:"+this.tiers.length);
for (var i=0;i<this.tiers.length;i++)
{
console.log("Tier #"+i);
console.log("name:"+this.tiers[i].name);
console.log("allowModify:"+this.tiers[i].allowModify);
console.log("startDate:"+this.tiers[i].startDate);
console.log("startTime:"+this.tiers[i].startTime);
console.log("endDate:"+this.tiers[i].endDate);
console.log("endTime:"+this.tiers[i].endTime);
console.log("rate:"+this.tiers[i].rate);
console.log("supply:"+this.tiers[i].supply);
if(this.tiers[i].whitelist!=null) {
console.log("Whitelist:" + this.tiers[i].whitelist.length);
for (var j = 0; j < this.tiers[i].whitelist.length; j++) {
console.log("whitelist#:" + j);
console.log("Address:" + this.tiers[i].whitelist[j].address);
console.log("Min:" + this.tiers[j].whitelist[j].min);
console.log("Max:" + this.tiers[j].whitelist[j].max);
}
}
}
}
}
module.exports={
Currency:Currency
}

43
entity/MetaMaskWallet.js Normal file
View File

@ -0,0 +1,43 @@
const fs = require('fs');
class MetaMaskWallet {
constructor() {
this.privateKey;
this.account;
this.networkID;
}
static createMetaMaskWallet(fileName){
var c=new MetaMaskWallet();
//by default
//c.account="0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411";
// c.privateKey="03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0";
// c.networkID=4;//1-main network by default
c.parser(fileName);
return c;
}
parser(fileName){
var obj=JSON.parse(fs.readFileSync(fileName,"utf8"));
this.account=obj.account;
this.privateKey=obj.privateKey;
this.networkID=obj.networkID;
}
print(){
console.log("account:"+this.account);
console.log("privateKey:"+this.privateKey);
console.log("networkID:"+this.networkID);
}
}
module.exports={
MetaMaskWallet:MetaMaskWallet
}

197
entity/Owner.js Normal file
View File

@ -0,0 +1,197 @@
const user=require("./User.js");
const User=user.User;
const by = require('selenium-webdriver/lib/by');
const By=by.By;
const wizardWelcome=require('../pages/WizardWelcome.js');
const meta=require('../pages/MetaMask.js');
const wizStep1=require('../pages/WizardStep1.js');
const wizStep2=require('../pages/WizardStep2.js');
const wizStep3=require('../pages/WizardStep3.js');
const wizStep4=require('../pages/WizardStep4.js');
const tierpage=require('../pages/TierPage.js');
const TierPage=tierpage.TierPage;
const reservedTokensPage=require('../pages/ReservedTokensPage.js');
const ReservedTokensPage=reservedTokensPage.ReservedTokensPage;
const utils=require('../utils/Utils.js');
const Utils=utils.Utils;
const fs = require('fs');
const currency= require('../entity/Currency.js');
const Currency=currency.Currency;
const metaMaskWallet=require('../entity/MetaMaskWallet.js');
const MetaMaskWallet=metaMaskWallet.MetaMaskWallet;
const crowdPage=require('../pages/CrowdsalePage.js');
const invest=require('../pages/InvestPage.js');
const StartBrowserWithMetamask=require('../utils/Utils.js');
const startBrowserWithMetamask=StartBrowserWithMetamask.startBrowserWithMetamask;
const crowdsale=require('../entity/Crowdsale.js');
const Crowdsale=crowdsale.Crowdsale;
const timeLimitTransactions=80;
const buttonSubmit=require('../pages/MetaMask.js');
const buttonContinue=require('../pages/WizardStep4.js');
class Owner
{
constructor(driver,file){
this.driver=driver;
var obj=JSON.parse(fs.readFileSync(file,"utf8"));
this.account=obj.account;
this.privateKey=obj.privateKey;
this.networkID=obj.networkID;
}
print(){
console.log("account:"+this.account);
console.log("privateKey:"+this.privateKey);
console.log("networkID:"+this.networkID);
}
openManage(){
}
distribute(){}
finalize(){}
getAmount(){}
async createCrowdsale(scenarioFile){
var utils=new Utils();
var d=new Date();
var outputDirectory="./results"+d.getTime();
fs.mkdirSync(outputDirectory);
fs.writeFileSync(outputDirectory+'/result.log', "Test start time:"+d.getTime());
const startURL="https://wizard.poa.network/";
var welcomePage = new wizardWelcome.WizardWelcome(this.driver,startURL);
var wallet=new MetaMaskWallet();
wallet.account=this.account;
wallet.privateKey=this.privateKey;
wallet.networkID=this.networkID;
var metaMask = new meta.MetaMask(this.driver,wallet);
var wizardStep1 = new wizStep1.WizardStep1(this.driver);
var wizardStep2 = new wizStep2.WizardStep2(this.driver);
var wizardStep3 = new wizStep3.WizardStep3(this.driver);
var wizardStep4 = new wizStep4.WizardStep4(this.driver);
var crowdsalePage = new crowdPage.CrowdsalePage(this.driver);
var investPage = new invest.InvestPage(this.driver);
var reservedTokens=new ReservedTokensPage(this.driver);
var cur=Currency.createCurrency(scenarioFile);
cur.print();
var tiers=[];
for (var i=0;i<cur.tiers.length;i++)
tiers.push(new TierPage(this.driver,cur.tiers[i]));
metaMask.setAccount(this);
welcomePage.open();
welcomePage.clickButtonNewCrowdsale();
this.driver.sleep(2000);
wizardStep1.clickButtonContinue();
this.driver.sleep(500);
wizardStep2.fillName(cur.name);
wizardStep2.fillTicker(cur.ticker);
wizardStep2.fillDecimals(cur.decimals);
for (var i=0;i<cur.reservedTokens.length;i++)
{
reservedTokens.fillReservedTokens(cur.reservedTokens[i]);
reservedTokens.clickButtonAddReservedTokens();
}
utils.zoom(this.driver,0.5);
utils.takeScreenshoot(this.driver,outputDirectory);
utils.zoom(this.driver,1);
wizardStep2.clickButtonContinue();
wizardStep3.fillWalletAddress(cur.walletAddress);
wizardStep3.setGasPrice(cur.gasPrice);
if (cur.whitelisting) wizardStep3.clickCheckboWhitelistYes();
else (wizardStep3.fillMinCap(cur.minCap));
utils.takeScreenshoot(this.driver,outputDirectory);
for (var i=0;i<cur.tiers.length-1;i++)
{
tiers[i].fillTier();
utils.takeScreenshoot(this.driver,outputDirectory);
wizardStep3.clickButtonAddTier();
}
tiers[cur.tiers.length-1].fillTier();
utils.takeScreenshoot(this.driver,outputDirectory);
wizardStep3.clickButtonContinue();
this.driver.sleep(2000);
if (!(await wizardStep4.isPage()))throw new Error('incorrect data in tiers');
var trCounter=0;
var b=true;
var timeLimit=timeLimitTransactions*cur.tiers.length;
do {
metaMask.switchToAnotherPage();
this.driver.sleep(6000);
metaMask.refresh();
this.driver.sleep(1000);
if ( await metaMask.isPresentButtonSubmit()) {
metaMask.submitTransaction();
trCounter++;
console.log("Transaction#"+trCounter);
}
welcomePage.switchToAnotherPage();
this.driver.sleep(1000);
if (!(await wizardStep4.isPage())) {
this.driver.sleep(2000);
wizardStep4.clickButtonOk();
b=false;
}
if((timeLimit--)==0)
{ var s="Deployment failed.Transaction were done:"+ trCounter;
fs.appendFileSync(outputDirectory+'/result.log',"\n"+s);
console.log(s);
b=false;}
} while (b);
utils.takeScreenshoot(this.driver,outputDirectory);
wizardStep4.clickButtonContinue();
this.driver.sleep(5000);
utils.takeScreenshoot(this.driver,outputDirectory);
b=true;
var counter=30;
do {
try {
this.driver.sleep(1000);
crowdsalePage.clickButtonInvest();
b=false;
}
catch (err){
counter++;
}
} while (b);
utils.takeScreenshoot(this.driver,outputDirectory);
this.driver.getCurrentUrl().then((res)=>{
console.log("Final invest page link: "+res);
fs.appendFileSync(outputDirectory+'/result.log', "\n\Final invest page link: \""+res);
fs.writeFileSync('./artifacts/result.log', res);//for circleci
});
s="Transaction were done: "+ trCounter;
console.log(s);
fs.appendFileSync(outputDirectory+'/result.log',s+'\n');
fs.appendFileSync(outputDirectory+'/result.log', "Test end time:"+new Date().getTime()+'\n');
return
await new Crowdsale(cur,
await investPage.getTokenAddress(),
await investPage.getContractAddress(),
await investPage.getURL()
);
}
}
module.exports.Owner=Owner;

17
entity/ReservedTokens.js Normal file
View File

@ -0,0 +1,17 @@
class ReservedTokens {
constructor(address, dimension, value) {
this.address = address;
this.dimension = dimension;
this.value = value;
}
}
module.exports.ReservedTokens=ReservedTokens;

24
entity/Tier.js Normal file
View File

@ -0,0 +1,24 @@
class Tier{
constructor(name,allowModify,rate,supply,startTime,startDate,endTime,endDate,whitelist){
this.name=name;
this.allowModify=allowModify;
this.rate=rate;
this.supply=supply;
this.startTime=startTime;
this.startDate=startDate;
this.endTime=endTime;
this.endDate=endDate;
this.whitelist=whitelist;
}
}
module.exports.Tier=Tier;

8
entity/User.js Normal file
View File

@ -0,0 +1,8 @@
class User {
constructor (account){
this.account=account;
}
}
module.exports.User=User;

15
entity/Whitelist.js Normal file
View File

@ -0,0 +1,15 @@
class Whitelist {
constructor(address, min, max) {
this.address = address;
this.min = min;
this.max = max;
}
}
module.exports.Whitelist=Whitelist;

75
index.js Normal file
View File

@ -0,0 +1,75 @@
const test1=require('./tests/Test1.js');
const Test1=test1.Test1;
const test2=require('./tests/Test2.js');
const Test2=test2.Test2;
const test3=require('./tests/Test3.js');
const Test3=test3.Test3;
const utils=require('./utils/Utils.js');
const Utils=utils.Utils;
const page=require('./pages/Page.js');
const wizardWelcome=require('./pages/WizardWelcome.js');
const metaMask=require('./pages/MetaMask.js');
const MetaMask=metaMask.MetaMask;
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
const currency= require('./entity/Currency.js');
const Currency=currency.Currency;
const metaMaskWallet=require('./entity/MetaMaskWallet.js');
const MetaMaskWallet=metaMaskWallet.MetaMaskWallet;
const tierpage=require('./pages/TierPage.js');
const TierPage=tierpage.TierPage;
const Web3 = require('web3');
const fs = require('fs');
///////////////////////////////////////
createPOACrowdsale('config.json');
//ttt();
function ttt(){
var util=new Utils();
var driver=util.startBrowser();
//var test3=new Test3(driver);
driver.get("https://wizard.poa.network/invest?addr=0xcB82AF7fD8Baa5A144Eaa90101c4901D987f9bf5&networkID=4");
}
function createPOACrowdsale(configFile) {
if (!fs.existsSync("./artifacts"))
fs.mkdirSync("./artifacts");//for CIRCLECI
var driver;
var util=new Utils();
if (util.getInstallMetamask(configFile))
driver = util.startBrowserWithMetamask();
else
driver=util.startBrowser();
// var testManage = new Test2(driver,configFile);
//testManage.run();
var wallet=new MetaMaskWallet();
wallet.account=this.account;
wallet.privateKey=this.privateKey;
wallet.networkID=this.networkID;
var mtMask = new MetaMask(driver,wallet);
mtMask.open();//return activated Metamask and empty page
var testWizard = new Test1(driver);
testWizard.run().then().catch();
// var test = new Test3(driver);
// test.run().then().catch();
}
module.exports={
createPOACrowdsale:createPOACrowdsale
}

5
owners/owner1.json Normal file
View File

@ -0,0 +1,5 @@
{
"account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID": 4
}

249
package-lock.json generated Normal file
View File

@ -0,0 +1,249 @@
{
"name": "wizardautomation",
"version": "0.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"bignumber.js": {
"version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934"
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"core-js": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
"integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU="
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"crypto-js": {
"version": "3.1.8",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz",
"integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU="
},
"es6-promise": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
"integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"jszip": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
"integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==",
"requires": {
"core-js": "2.3.0",
"es6-promise": "3.0.2",
"lie": "3.1.1",
"pako": "1.0.6",
"readable-stream": "2.0.6"
}
},
"lie": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
"integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
"requires": {
"immediate": "3.0.6"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "1.1.11"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1.0.2"
}
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"pako": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
"integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"string_decoder": "0.10.31",
"util-deprecate": "1.0.2"
}
},
"rimraf": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"requires": {
"glob": "7.1.2"
}
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"selenium-webdriver": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz",
"integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==",
"requires": {
"jszip": "3.1.5",
"rimraf": "2.6.2",
"tmp": "0.0.30",
"xml2js": "0.4.19"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
},
"tmp": {
"version": "0.0.30",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
"integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
"requires": {
"os-tmpdir": "1.0.2"
}
},
"utf8": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz",
"integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"web3": {
"version": "0.20.5",
"resolved": "https://registry.npmjs.org/web3/-/web3-0.20.5.tgz",
"integrity": "sha1-xQSNNfe/TixMKAzlH7u8lRKQsWU=",
"requires": {
"bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934",
"crypto-js": "3.1.8",
"utf8": "2.1.2",
"xhr2": "0.1.4",
"xmlhttprequest": "1.8.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"xhr2": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz",
"integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8="
},
"xml2js": {
"version": "0.4.19",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
"requires": {
"sax": "1.2.4",
"xmlbuilder": "9.0.7"
}
},
"xmlbuilder": {
"version": "9.0.7",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
},
"xmlhttprequest": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
"integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
}
}
}

12
package.json Normal file
View File

@ -0,0 +1,12 @@
{
"name": "wizardautomation",
"version": "0.0.0",
"private": false,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"selenium-webdriver": "^3.6.0",
"web3": "^0.20.4"
}
}

27
pages/CrowdsalePage.js Normal file
View File

@ -0,0 +1,27 @@
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
const buttonInvest=By.xpath('//*[@id="root"]/div/section/div[3]/a');
class CrowdsalePage extends page.Page{
constructor(driver){
super(driver);
this.URL;
}
clickButtonInvest(){
super.clickWithWait(buttonInvest);
}
}
module.exports={
CrowdsalePage:CrowdsalePage
}

36
pages/InvestPage.js Normal file
View File

@ -0,0 +1,36 @@
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
const buttonContribute=By.xpath('//*[@id="root"]/div/div[1]/div[1]/div[2]/form/div[2]/a');
const fieldTokenAddress=By.xpath("//*[@id=\"root\"]/div/div[1]/div[1]/div[1]/div[2]/div[2]/p[1]");
const fieldContractAddress=By.xpath("//*[@id=\"root\"]/div/div[1]/div[1]/div[1]/div[2]/div[3]/p[1]");
class InvestPage extends page.Page{
constructor(driver){
super(driver);
this.URL;
}
clickButtonContribute(){
super.clickWithWait(buttonContribute);
}
getTokenAddress(){
return super.getText(fieldTokenAddress);
}
getContractAddress(){
return super.getText(fieldContractAddress);
}
}
module.exports={
InvestPage:InvestPage
}

55
pages/ManagePage.js Normal file
View File

@ -0,0 +1,55 @@
const by = require('selenium-webdriver/lib/by');
const page=require('./Page.js');
const Page=page.Page;
const By=by.By;
const utils=require('../utils//Utils.js');
const Utils=utils.Utils;
const firstContract=By.xpath("//*[@id=\"root\"]/div/div[1]/section/div[3]/div/div[1]/div/div[2]/div[1]/div");
const buttonDistribute=By.xpath("//*[@id=\"root\"]/div/section/div[1]/div/a/span");
const buttonFinalize=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div/a/span");
class ManagePage extends Page
{
constructor(driver) {
super(driver);
this.URL;
}
//https://wizard.poa.network/manage/0x7eB29E0922C87D728c81A9FAB66e97668c917108
open(){
this.driver.get(this.URL);
}
async isAvailable(){
return await super.isElementPresent(firstContract);
}
async isAvailableDistribute(){
return await this.driver.findElement(buttonDistribute).isEnabled();
}
async isAvailableFinalize(){
return await this.driver.findElement(buttonFinalize).isEnabled();
}
async isPresentButtonFinalize(){
return await super.isElementPresent(buttonFinalize);
}
async clickButtonDistribute(){
super.clickWithWait(buttonDistribute);
}
clickButtonFinalize(){
this.driver.sleep(500);
super.clickWithWait(buttonFinalize);
}
}
module.exports={
ManagePage:ManagePage
}

211
pages/MetaMask.js Normal file
View File

@ -0,0 +1,211 @@
const key = require('selenium-webdriver').Key;
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
//"chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn//popup.html"
const IDMetaMask="nkbihfbeogaeaoehlefnkodbefgpgknn";
const URL="chrome-extension://"+IDMetaMask+"//popup.html";
const passMetaMask="kindzadza";
const fieldEnterPass= By.xpath("//*[@id=\"password-box\"]");
const buttonUnlock=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/div[1]/button");
const buttonBuy= By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/div/div[2]/button[1]");
const buttonSend= By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/div/div[2]/button[2]");
const buttonSubmit=By.xpath("//*[@id=\"pending-tx-form\"]/div[3]/input");
const fieldGasPrise=By.xpath("//*[@id=\"pending-tx-form\"]/div[1]/div[2]/div[3]/div[2]/div/div/input");
///////Imported from TestCircle//////
const buttonAccept=By.xpath('//*[@id="app-content"]/div/div[4]/div/button');
const agreement=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/div/div/p[1]/strong");
const fieldNewPass=By.xpath("//*[@id=\"password-box\"]");
const fieldConfirmPass=By.xpath("//*[@id=\"password-box-confirm\"]");
const buttonCreate=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/button");
const fieldSecretWords=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/textarea");
const buttonIveCopied=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/button[1]");
//const popupNetwork=By.xpath("//*[@id=\"network_component\"]/div/i");
const popupNetwork=By.className("network-name");
//const popupRinkeby=By.className("menu-icon golden-square");
const popupRinkeby=By.css("Rinkeby Test Network");
const popupAccount=By.xpath("//*[@id=\"app-content\"]/div/div[1]/div/div[2]/span/div");
const popupImportAccount=By.xpath("//*[@id=\"app-content\"]/div/div[1]/div/div[2]/span/div/div/span/div/li[3]/span");
const popupImportAccountCSS="#app-content > div > div.full-width > div > div:nth-child(2) > span > div > div > span > div > li:nth-child(4) > span";
const fieldPrivateKey=By.xpath("//*[@id=\"private-key-box\"]");
const pass="kindzadza";
const buttonImport=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/div[3]/button");
const secretWords="mask divorce brief insane improve effort ranch forest width accuse wall ride";
const amountEth=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/div/div[2]/div[1]/div/div/div[1]/div[1]");
const fieldNewRPCURL=By.id("new_rpc");
const buttonSave=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/div[3]/div/div[2]/button");
//const arrowBackRPCURL=By.className("fa fa-arrow-left fa-lg cursor-pointer");
const arrowBackRPCURL=By.xpath("//*[@id=\"app-content\"]/div/div[4]/div/div[1]/i");
var accN=2;
var lengthNetworkMenu=6;
var networks=[];
class MetaMask extends page.Page{
constructor(driver,wallet){
super(driver);
this.URL=URL;
this.wallet=wallet;
}
isButtonSubmitPresent(){}
setGasPriceTransaction(price){
super.fillWithWait(fieldGasPrise,price);
}
clickButtonSubmit(){
super.clickWithWait(buttonSubmit);
}
clickPopupNetwork(){
super.clickWithWait(popupNetwork);
}
isReadyTransaction(){
return this.isElementPresent(buttonSubmit);
}
submitTransaction(){
this.clickButtonSubmit();
}
unlock() {
//this.open();
super.fillWithWait(fieldEnterPass,passMetaMask);
super.clickWithWait(buttonUnlock);
}
open()
{
this.driver.get(this.URL);
super.clickWithWait(buttonAccept);
const action=this.driver.actions();
action.click(this.driver.findElement(agreement)).perform();
for (var i=0;i<9;i++) {
action.sendKeys(key.TAB).perform();
}
super.clickWithWait(buttonAccept);
super.fillWithWait(fieldNewPass,pass);
super.fillWithWait(fieldConfirmPass,pass);
super.clickWithWait(buttonCreate);
this.driver.sleep(1500);
super.clickWithWait(buttonIveCopied);
this.switchToAnotherPage();
}
clickDotMenu(){
super.clickWithWait(dotMenu);
}
getAddressWallet(){
//super.clickWithWait(addrWallet);
return this.driver.findElement(addrWallet).getText();
}
setAccount(user){
this.switchToAnotherPage();
this.chooseProvider(user.networkID);
super.clickWithWait(popupAccount);
this.driver.executeScript("document.getElementsByClassName('dropdown-menu-item')[2].click();");
super.fillWithWait(fieldPrivateKey,user.privateKey);
this.driver.sleep(1500);
super.clickWithWait(buttonImport);
this.switchToAnotherPage();
}
activate(user){
this.chooseProvider(user.networkID);
super.clickWithWait(popupAccount);
this.driver.executeScript("document.getElementsByClassName('dropdown-menu-item')[2].click();");
super.fillWithWait(fieldPrivateKey,this.owner.privateKey);
this.driver.sleep(1500);
super.clickWithWait(buttonImport);
}
async isPresentButtonSubmit()
{
return await super.isElementPresent(buttonSubmit);
}
chooseProvider(provider){
super.clickWithWait(popupNetwork);
var n;
switch(provider)
{
case 0:{n=0;break;} //Olympic=>Main
case 1:{n=0;break;} //Main
case 2:{n=0;break;} //Mordern=>Main
case 3:{n=1;break;} //Ropsten
case 4:{n=3;break;} //Rinkeby
case 8545:{n=4;break;} //localhost8545
case 42:{n=2;break;} //Kovan
default:{
this.addNetwork(provider);
}
}
if (n<=4)this.driver.executeScript("document.getElementsByClassName('dropdown-menu-item')["+n+"].click();");
}
addNetwork(provider){
var url;
switch(provider)
{
case 77:{url="https://sokol.poa.network";break;}//Sokol
case 99:{url="https://core.poa.network";break;} //POA
case 7762959:{url="https://sokol.poa.network";break;} //Musicoin=>SOKOL
default:{throw("RPC Network not found. Check 'networkID' in scenario(owner,investor) file");}
}
this.driver.executeScript("" +
"document.getElementsByClassName('dropdown-menu-item')["+(lengthNetworkMenu-1)+"].click();");
super.fillWithWait(fieldNewRPCURL,url);
super.clickWithWait(buttonSave);
this.driver.sleep(1000);
super.clickWithWait(arrowBackRPCURL);
lengthNetworkMenu++;
};
createAccount(){
super.clickWithWait(popupAccount);
this.driver.executeScript(
"document.getElementsByClassName('dropdown-menu-item')["+accN+"].click();");
}
}
module.exports={
MetaMask:MetaMask,
buttonSubmit:buttonSubmit
}

99
pages/Page.js Normal file
View File

@ -0,0 +1,99 @@
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const key = require('selenium-webdriver').Key;
const Twait=20000;
class Page {
constructor(driver){
this.driver=driver;
this.pageID;
this.footer;
this.header;
}
async isElementPresent(element) {
var q;
try {
q = await this.driver.findElement(element).isDisplayed();
} catch (err) {
q = false;
}
return q;
}
async getText(element)
{
return await this.driver.findElement(element).getText();
}
async getURL()
{
return await this.driver.getCurrentUrl();
}
open (url){
this.driver.get(url);
}
clearField(element){
let field = this.driver.wait(webdriver.until.elementLocated(element), Twait);
const c=key.chord(key.CONTROL,"a");
const action=this.driver.actions();
action.click(field).perform();
//action.click(field).perform();
this.driver.sleep(500);
action.sendKeys(c).perform();
action.sendKeys(key.DELETE).perform();
action.sendKeys(key.DELETE).perform();
}
oneClick(element){
this.driver.findElement(element).click();
}
clickWithWait(element) {
let button = this.driver.wait(webdriver.until.elementLocated(element), Twait);
button.click();
}
fillWithWait(element,k) {
let field = this.driver.wait(webdriver.until.elementLocated(element), Twait);
field.sendKeys(k);
}
refresh(){
this.driver.navigate().refresh();
}
switchToAnotherPage(){
let dr=this.driver;
dr.getWindowHandle().then(function (mainWindowHandle) {
dr.getAllWindowHandles().then(function (windowHandles) {
windowHandles.forEach(function(handle){
if(!(handle===mainWindowHandle))
{
dr.switchTo().window(handle);
}
});
});
});
}
}
module.exports.Page=Page;

View File

@ -0,0 +1,64 @@
const page=require('./Page.js');
const Page=page.Page;
const by = require('selenium-webdriver/lib/by');
const By=by.By;
const fieldAddress=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[4]/div/div[1]/div[1]/input");
const checkboxTokens=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[4]/div/div[1]/div[2]/div/label[1]/span");
const checkboxPercentage=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[4]/div/div[1]/div[2]/div/label[2]/span");
const fieldValue=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[4]/div/div[1]/div[3]/input");
const buttonAdd=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[4]/div/div[2]/div");
class ReservedTokensPage extends Page{
constructor(driver) {
super(driver);
this.URL;
}
fillReservedTokens(reservedTokens){
try {
if (reservedTokens.address == undefined) return;
this.fillAddress(reservedTokens.address);
this.setDimension(reservedTokens.dimension);
this.fillValue(reservedTokens.value);
}
catch (err){console.log("Reserved tokens: Incorrect data")}
}
setDimension(dimension){
if (dimension=='percentage') this.clickCheckboxPercentage();
else this.clickCheckboxTokens();
}
fillAddress(address){
super.fillWithWait(fieldAddress,address);
}
fillValue(value){
super.fillWithWait(fieldValue,value);
}
clickCheckboxPercentage(){
super.clickWithWait(checkboxPercentage);
}
clickCheckboxTokens(){
super.clickWithWait(checkboxTokens);
}
clickButtonAddReservedTokens(){
super.clickWithWait(buttonAdd);
}
}
module.exports.ReservedTokensPage=ReservedTokensPage;

200
pages/TierPage.js Normal file
View File

@ -0,0 +1,200 @@
console.log(module.filename);
const key = require('selenium-webdriver').Key;
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
var COUNT_TIERS=0;
const fieldAddressTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div[2]/div[2]/div/div[1]/div[1]/input");
const fieldAddress1="//*[@id=\"root\"]/div/section/div[4]/div[";
const fieldAddress2="]/div[2]/div[2]/div/div[1]/div[1]/input";
const fieldMinTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div[2]/div[2]/div/div[1]/div[2]/input");
const fieldMin1="//*[@id=\"root\"]/div/section/div[4]/div[";
const fieldMin2="]/div[2]/div[2]/div/div[1]/div[2]/input";
const fieldMaxTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div[2]/div[2]/div/div[1]/div[3]/input");
const fieldMax1="//*[@id=\"root\"]/div/section/div[4]/div[";
const fieldMax2="]/div[2]/div[2]/div/div[1]/div[3]/input";
const buttonAdd=By.className("button button_fill button_fill_plus");
const buttonAdd1="//*[@id=\"root\"]/div/section/div[4]/div[";
const buttonAdd2="]/div[2]/div[2]/div/div[2]/div";
const fieldNameTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div/div[1]/div[1]/input\n");
const checkboxModifyOffTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div/div[1]/div[2]/div/label[2]/span\n");
const checkboxModifyOnTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div/div[1]/div[2]/div/label[1]/span");
const fieldRateTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div/div[3]/div[1]/input");
const fieldSupplyTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div/div[3]/div[2]/input");
const fieldStartTimeTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div/div[2]/div[1]/input");
const fieldEndTimeTier1=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div/div[2]/div[2]/input");
const fieldName1="//*[@id=\"root\"]/div/section/div[4]/div[";
const fieldName2="]/div/div[1]/div[1]/input";
const fieldRate1="//*[@id=\"root\"]/div/section/div[4]/div[";
const fieldRate2="]/div/div[3]/div[1]/input";
const fieldSupply1="//*[@id=\"root\"]/div/section/div[4]/div[";
const fieldSupply2="]/div/div[3]/div[2]/input\n";
const checkboxModifyOn1="//*[@id=\"root\"]/div/section/div[4]/div[";
const checkboxModifyOn2="]/div/div[1]/div[2]/div/label[1]/span\n";
const checkboxModifyOff1="//*[@id=\"root\"]/div/section/div[4]/div[";
const checkboxModifyOff2="]/div/div[1]/div[2]/div/label[2]/span\n";
const fieldStartTime1="//*[@id=\"root\"]/div/section/div[4]/div[";
const fieldStartTime2="]/div/div[2]/div[1]/input";
const fieldEndTime1="//*[@id=\"root\"]/div/section/div[4]/div[";
const fieldEndTime2="]/div/div[2]/div[2]/input";
class TierPage extends page.Page{
constructor(driver,tier){
super(driver);
this.URL;
this.tier=tier;
this.number=COUNT_TIERS++;
}
print(){
console.log(typeof(this.tier));
}
fillTier()
{
this.fillSetupName();
this.fillRate();
this.fillSupply();
this.setModify();
this.fillStartTime();
this.fillEndTime();
if (this.tier.whitelist!=null)
this.fillWhitelist();
}
fillSetupName()
{
let locator;
if (this.number==0) {locator=fieldNameTier1;}
else {locator=by.By.xpath(fieldName1+this.number+fieldName2);}
super.clearField(locator);
super.fillWithWait(locator,this.tier.name);
}
fillRate()
{
let locator;
if (this.number==0) {locator=fieldRateTier1;}
else {locator=by.By.xpath(fieldRate1+this.number+fieldRate2);}
super.clearField(locator);
super.fillWithWait(locator,this.tier.rate);
}
fillSupply()
{
let locator;
if (this.number==0) {locator=fieldSupplyTier1;}
else {locator=by.By.xpath(fieldSupply1+this.number+fieldSupply2);}
super.clearField(locator);
super.fillWithWait(locator,this.tier.supply);
}
setModify() {
let locator;
if (this.number == 0)
if (this.tier.allowModify) {
locator = checkboxModifyOnTier1;
}
else {
locator = checkboxModifyOffTier1;
}
else {
if (this.tier.allowModify) {
locator = by.By.xpath(checkboxModifyOn1 + this.number + checkboxModifyOn2);
}
else {
locator = by.By.xpath(checkboxModifyOff1 + this.number + checkboxModifyOff2);
}
}
super.clickWithWait(locator);
}
fillStartTime()
{
let locator;
if (this.number==0) {locator=fieldStartTimeTier1;}
else {locator=by.By.xpath(fieldStartTime1+this.number+fieldStartTime2);}
super.fillWithWait(locator,this.tier.startDate);
const action=this.driver.actions();
action.sendKeys(key.TAB).perform();
super.fillWithWait(locator,this.tier.startTime);
//this.driver.findElement(locator).sendKeys(webdriver.Key.TAB);
// super.fillWithWait(locator,"06:59PM");
}
fillEndTime()
{
let locator;
if (this.number==0) {locator=fieldEndTimeTier1;}
else {locator=by.By.xpath(fieldEndTime1+this.number+fieldEndTime2);}
super.fillWithWait(locator,this.tier.endDate);
const action=this.driver.actions();
action.sendKeys(key.TAB).perform();
super.fillWithWait(locator,this.tier.endTime);
}
fillWhitelist(){
for (var i=0;i<this.tier.whitelist.length;i++) {
this.fillAddress(this.tier.whitelist[i].address);
this.fillMin(this.tier.whitelist[i].min);
this.fillMax(this.tier.whitelist[i].max);
this.clickButtonAdd();
}
}
fillAddress(address){
let locator;
if (this.number==0) {locator=fieldAddressTier1;}
else {locator=by.By.xpath(fieldAddress1+this.number+fieldAddress2);}
super.fillWithWait(locator,address);
this.driver.sleep(500);
}
fillMin(value){
let locator;
if (this.number==0) {locator=fieldMinTier1;}
else {locator=by.By.xpath(fieldMin1+this.number+fieldMin2);}
super.fillWithWait(locator,value);
}
fillMax(value){
let locator;
if (this.number==0) {locator=fieldMaxTier1;}
else {locator=by.By.xpath(fieldMax1+this.number+fieldMax2);}
super.fillWithWait(locator,value);
}
clickButtonAdd(){
let locator;
if (this.number==0) {locator=buttonAdd}
else {locator=By.xpath(buttonAdd1+this.number+buttonAdd2);}
super.clickWithWait(locator);
}
}
module.exports.TierPage=TierPage;

27
pages/WizardStep1.js Normal file
View File

@ -0,0 +1,27 @@
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const buttonContinue= by.By.xpath("//*[@id=\"root\"]/div/section/div[3]/a/span");
class WizardStep1 extends page.Page{
constructor(driver){
super(driver);
this.URL;
}
clickButtonContinue(){
super.clickWithWait(buttonContinue);
}
}
module.exports.WizardStep1=WizardStep1;

43
pages/WizardStep2.js Normal file
View File

@ -0,0 +1,43 @@
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
const fieldName=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[1]/input");
const fieldTicker=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[2]/input");
const fieldDecimals=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[3]/input");
const buttonContinue=By.xpath("//*[@id=\"root\"]/div/section/div[3]/a");
class WizardStep2 extends page.Page {
constructor(driver) {
super(driver);
this.URL;
}
fillName(name){
super.fillWithWait(fieldName,name);
}
fillTicker(name){
super.fillWithWait(fieldTicker,name);
}
fillDecimals(name){
super.fillWithWait(fieldDecimals,name);
}
clickDecimals(){
super.clickWithWait(fieldDecimals);
}
clickButtonContinue(){
super.clickWithWait(buttonContinue);
}
}
module.exports.WizardStep2=WizardStep2;

94
pages/WizardStep3.js Normal file
View File

@ -0,0 +1,94 @@
console.log(module.filename);
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
const fieldWalletAddress=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[2]/div[1]/input");
const fieldMinCap=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[3]/div[1]/input");
const boxGasPriceSafe=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[2]/div[2]/div[1]/label/span");
const boxGasPriceNormal=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[2]/div[2]/div[2]/label/span");
const boxGasPriceFast=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[2]/div[2]/div[3]/label/span");
const boxGasPriceCustom=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[2]/div[2]/div[4]/label/span");
const fieldGasPriceCustom=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[2]/div[2]/input");
const buttonContinue=By.xpath("//*[@id=\"root\"]/div/section/div[5]/div/a");
const buttonAddTier=By.xpath("//*[@id=\"root\"]/div/section/div[5]/div/div");
const boxWhitelistingYes=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[3]/div[2]/div/label[1]/span");
const boxWhitelistingNo=By.xpath("//*[@id=\"root\"]/div/section/div[2]/div[2]/div[3]/div[2]/div/label[2]/span");
class WizardStep3 extends page.Page{
constructor(driver){
super(driver);
this.URL;
this.tier;
}
clickButtonContinue(){
super.clickWithWait(buttonContinue);
}
fillWalletAddress(address){
super.clearField(fieldWalletAddress);
super.fillWithWait(fieldWalletAddress,address);
}
clickCheckboxGasPriceSafe()
{
super.clickWithWait(boxGasPriceSafe);
}
clickCheckboxGasPriceNormal()
{
super.clickWithWait(boxGasPriceNormal);
}
clickCheckboxGasPriceFast()
{
super.clickWithWait(boxGasPriceFast);
}
clickCheckboxGasPriceCustom()
{
super.clickWithWait(boxGasPriceCustom);
}
fillGasPriceCustom(value){
super.clearField(fieldGasPriceCustom);
super.fillWithWait(fieldGasPriceCustom,value);
}
clickCheckboWhitelistYes()
{
super.clickWithWait(boxWhitelistingYes);
}
clickCheckboWhitelistNo()
{
super.clickWithWait(boxWhitelistingNo);
}
clickButtonAddTier()
{
super.clickWithWait(buttonAddTier);
}
setGasPrice(value){
switch(value){
case 2:{this.clickCheckboxGasPriceSafe();break;}
case 4:{this.clickCheckboxGasPriceNormal();break;}
case 30:{this.clickCheckboxGasPriceFast();break;}
default:{
this.clickCheckboxGasPriceCustom();
this.fillGasPriceCustom(value);
}
}
}
fillMinCap(value){
super.clearField(fieldMinCap);
super.fillWithWait(fieldMinCap,value);
}
}
module.exports.WizardStep3=WizardStep3;

48
pages/WizardStep4.js Normal file
View File

@ -0,0 +1,48 @@
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
const buttonContinue=By.xpath("//*[@id=\"root\"]/div/section/div[3]/a");
const buttonDownload=By.xpath("//*[@id=\"root\"]/div/section/div[3]/div");
const blueScreen=By.xpath('//*[@id="root"]/div/section/div[4]/div[2]/div');
const modal=By.xpath("//*[@id=\"root\"]/div/section/div[4]/div/p");
const buttonOK=By.xpath('/html/body/div[2]/div/div[3]/button[1]');
class WizardStep4 extends page.Page{
constructor(driver){
super(driver);
this.URL;
}
async isPage(){
return await super.isElementPresent(modal);
}
clickButtonContinue(){
super.clickWithWait(buttonContinue);
}
clickButtonDownload(){
super.clickWithWait(buttonDownload);
}
clickButtonOk(){
super.clickWithWait(buttonOK);
}
}
module.exports={
WizardStep4:WizardStep4,
blueScreen:blueScreen,
buttonContinue:buttonContinue
}

44
pages/WizardWelcome.js Normal file
View File

@ -0,0 +1,44 @@
const page=require('./Page.js');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const buttonNewCrowdsale=by.By.css("#root > div > div:nth-child(2) > section > div.crowdsale > div > div > a > span");
const buttonChooseContract=by.By.xpath("//*[@id=\"root\"]/div/div[1]/section/div[1]/div/div/div");
class WizardWelcome extends page.Page{
constructor(driver,URL){
super(driver);
this.URL=URL;
}
open()
{
this.driver.get(this.URL);
}
clickButtonNewCrowdsale(){
super.clickWithWait(buttonNewCrowdsale);
}
clickButtonChooseContract(){
super.clickWithWait(buttonChooseContract);
}
open()
{
this.driver.get(this.URL);
}
}
module.exports.WizardWelcome=WizardWelcome;

View File

@ -0,0 +1,231 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T10RyWyMy_02/10/18 1am",
"ticker": "MSC",
"decimals": 3,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "02:40pm",
"endDate":"02/10/2018",
"endTime":"02:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###2",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "03:40pm",
"endDate":"02/10/2018",
"endTime":"03:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###3",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "04:40pm",
"endDate":"02/10/2018",
"endTime":"04:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###4",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "05:40pm",
"endDate":"02/10/2018",
"endTime":"05:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###5",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "06:40pm",
"endDate":"02/10/2018",
"endTime":"06:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###6",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "07:51pm",
"endDate":"02/10/2018",
"endTime":"07:59pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###7",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "08:51pm",
"endDate":"02/10/2018",
"endTime":"08:59pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###8",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "09:51pm",
"endDate":"02/10/2018",
"endTime":"09:59pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###9",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "10:45pm",
"endDate":"02/10/2018",
"endTime":"10:59pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###10",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "11:51pm",
"endDate":"02/10/2018",
"endTime":"11:59pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}
]
}

View File

@ -0,0 +1,43 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RnWn_0005.json",
"ticker": "test",
"decimals": 3,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "03:15pm",
"endDate":"02/10/2018",
"endTime":"03:30pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":10,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

38
scenarios/T1RnWy.json Normal file
View File

@ -0,0 +1,38 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RnWy.json",
"ticker": "test",
"decimals": 3,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/15/2018",
"startTime": "04:15pm",
"endDate":"02/15/2018",
"endTime":"04:30pm",
"rate":100,
"supply": 20,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
}]
}]
}

View File

@ -0,0 +1,44 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RnWy_0003.json",
"ticker": "test",
"decimals": 2,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": false,
"startDate": "02/10/2018",
"startTime": "11:50am",
"endDate":"02/10/2018",
"endTime":"11:59am",
"rate":100,
"supply": 150,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":100
},
{
"address":"0x41B4073E966c169dB22185805A951A0f1b805320",
"min":0,
"max":100
}
]
}]
}

View File

@ -0,0 +1,43 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RnWnMy_0015.json",
"ticker": "t0015",
"decimals": 2,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/13/2018",
"startTime": "11:30pm",
"endDate":"02/13/2018",
"endTime":"11:50pm",
"rate":100,
"supply": 20,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":10,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

View File

@ -0,0 +1,46 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RyWn_0007.json",
"ticker": "test",
"decimals": 3,
"reservedTokens":[
{
"address" :"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"dimension": "percentage",
"value": 20
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "tokens",
"value": 100
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/12/2018",
"startTime": "11:40am",
"endDate":"02/12/2018",
"endTime":"11:55am",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

View File

@ -0,0 +1,53 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RyWn_0008.json",
"ticker": "t0008",
"decimals": 3,
"reservedTokens":[
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "tokens",
"value": 99.9999
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "tokens",
"value": 99.9999
},
],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/12/2018",
"startTime": "05:59pm",
"endDate":"02/12/2018",
"endTime":"06:59pm",
"rate":100,
"supply": 20,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

View File

@ -0,0 +1,51 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RyWn_0009.json",
"ticker": "t0009",
"decimals": 3,
"reservedTokens":[
{
"address" :"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"dimension": "percentage",
"value": 100
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "tokens",
"value": 100
}
],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/12/2018",
"startTime": "08:04pm",
"endDate":"02/12/2018",
"endTime":"08:20pm",
"rate":100,
"supply": 20,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

View File

@ -0,0 +1,60 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RyWn_0010.json",
"ticker": "t0010",
"decimals": 3,
"reservedTokens":[
{
"address" :"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"dimension": "percentage",
"value": 0
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "tokens",
"value": 0
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "tokens",
"value": 1000000000
},
{
"address" :"0x56B2e3C3cFf7f3921Dc2e0F8B8e20d1eEc29216b",
"dimension": "percentage",
"value": 1000000000
}
],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/12/2018",
"startTime": "3:05pm",
"endDate":"02/12/2018",
"endTime":"3:59pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

View File

@ -0,0 +1,52 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RyWn_0011.json",
"ticker": "t0011",
"decimals": 3,
"reservedTokens":[
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "percentage",
"value": 34.6
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "tokens",
"value": 99.999
}
],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/12/2018",
"startTime": "04:30pm",
"endDate":"02/12/2018",
"endTime":"04:35pm",
"rate":100,
"supply": 100,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

529
scenarios/T1RyWn_0012.json Normal file
View File

@ -0,0 +1,529 @@
{
"account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RyWn_0012.json",
"ticker": "t0012",
"decimals": 3,
"reservedTokens":[
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "percentage",
"value": 1
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "tokens",
"value": 2
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "percentage",
"value": 3
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "tokens",
"value": 4
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "percentage",
"value": 5
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "tokens",
"value": 6
},
{
"address" :"0x56B2e3C3cFf7f3921Dc2e0F8B8e20d1eEc29216b",
"dimension": "percentage",
"value":7
},
{
"address" :"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"dimension": "tokens",
"value": 8
},
{
"address" :"0xd13c7924241E51Eb013003490736e6169a15786a",
"dimension": "percentage",
"value": 9
},
{
"address" :"0xBC4023Baef7B812c23f21bc0b108A188243b07Cb",
"dimension": "tokens",
"value": 10
}, {
"address" :"0x2589bd7D8A58Ac9A4aC01d68A7c63315ef184c63",
"dimension": "percentage",
"value": 11
},
{
"address" :"0xF3eA35DB8F0058b4e0aD45F883172E92fdCb4B82",
"dimension": "tokens",
"value": 12
}, {
"address" :"0xb3b4F4b5568BB6dF78e4d96Ad30A5538C913D495",
"dimension": "percentage",
"value": 13
},
{
"address" :"0x16926399BAF474Cd314E6425ace67A88EA5BeA11",
"dimension": "tokens",
"value": 14
}, {
"address" :"0xE98055678d8e8724E5106b059e88557a99561007",
"dimension": "percentage",
"value": 15
},
{
"address" :"0x06554522da78D90015a12C5caaf96be2999ea3F9",
"dimension": "tokens",
"value": 16
}, {
"address" :"0x5537F8335625adB9f95Dfa6E7AfE3A2AF600084B",
"dimension": "percentage",
"value": 17
},
{
"address" :"0x1894F11ddf864CA1de4eB339512a79e199cbf194",
"dimension": "tokens",
"value": 18
}, {
"address" :"0xeec3B3A65E3157b19605911615218B33772d5da2",
"dimension": "percentage",
"value": 19
},
{
"address" :"0xec8Af49612F4EdfcD069B8cfe95552740c6849e0",
"dimension": "tokens",
"value": 20
}, {
"address" :"0x9613130348aC610732A391063CD70b5a8c186EfC",
"dimension": "percentage",
"value": 21
},
{
"address" :"0x7Bc397b1F42bB521cEadE2509f8deAF477C7BEd6",
"dimension": "tokens",
"value": 22
}, {
"address" :"0x8632cc8620f7aA794aC1a3b88e0D07E4BF133638",
"dimension": "percentage",
"value": 23
},
{
"address" :"0xd540257890329448fB721B6A1bB562Bb95BA0eb7",
"dimension": "tokens",
"value": 24
}, {
"address" :"0x8e4aD05Ae00C76a371B3Ab96AD739401ec63BCDA",
"dimension": "percentage",
"value": 25
},
{
"address" :"0xd3E49136aBdAda1EeD2df2ed7c7D530c1b54afcD",
"dimension": "tokens",
"value": 26
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "percentage",
"value": 1
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "tokens",
"value": 2
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "percentage",
"value": 3
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "tokens",
"value": 4
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "percentage",
"value": 5
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "tokens",
"value": 6
},
{
"address" :"0x56B2e3C3cFf7f3921Dc2e0F8B8e20d1eEc29216b",
"dimension": "percentage",
"value":7
},
{
"address" :"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"dimension": "tokens",
"value": 8
},
{
"address" :"0xd13c7924241E51Eb013003490736e6169a15786a",
"dimension": "percentage",
"value": 9
},
{
"address" :"0xBC4023Baef7B812c23f21bc0b108A188243b07Cb",
"dimension": "tokens",
"value": 10
}, {
"address" :"0x2589bd7D8A58Ac9A4aC01d68A7c63315ef184c63",
"dimension": "percentage",
"value": 11
},
{
"address" :"0xF3eA35DB8F0058b4e0aD45F883172E92fdCb4B82",
"dimension": "tokens",
"value": 12
}, {
"address" :"0xb3b4F4b5568BB6dF78e4d96Ad30A5538C913D495",
"dimension": "percentage",
"value": 13
},
{
"address" :"0x16926399BAF474Cd314E6425ace67A88EA5BeA11",
"dimension": "tokens",
"value": 14
}, {
"address" :"0xE98055678d8e8724E5106b059e88557a99561007",
"dimension": "percentage",
"value": 15
},
{
"address" :"0x06554522da78D90015a12C5caaf96be2999ea3F9",
"dimension": "tokens",
"value": 16
}, {
"address" :"0x5537F8335625adB9f95Dfa6E7AfE3A2AF600084B",
"dimension": "percentage",
"value": 17
},
{
"address" :"0x1894F11ddf864CA1de4eB339512a79e199cbf194",
"dimension": "tokens",
"value": 18
}, {
"address" :"0xeec3B3A65E3157b19605911615218B33772d5da2",
"dimension": "percentage",
"value": 19
},
{
"address" :"0xec8Af49612F4EdfcD069B8cfe95552740c6849e0",
"dimension": "tokens",
"value": 20
}, {
"address" :"0x9613130348aC610732A391063CD70b5a8c186EfC",
"dimension": "percentage",
"value": 21
},
{
"address" :"0x7Bc397b1F42bB521cEadE2509f8deAF477C7BEd6",
"dimension": "tokens",
"value": 22
}, {
"address" :"0x8632cc8620f7aA794aC1a3b88e0D07E4BF133638",
"dimension": "percentage",
"value": 23
},
{
"address" :"0xd540257890329448fB721B6A1bB562Bb95BA0eb7",
"dimension": "tokens",
"value": 24
}, {
"address" :"0x8e4aD05Ae00C76a371B3Ab96AD739401ec63BCDA",
"dimension": "percentage",
"value": 25
},
{
"address" :"0xd3E49136aBdAda1EeD2df2ed7c7D530c1b54afcD",
"dimension": "tokens",
"value": 26
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "percentage",
"value": 1
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "tokens",
"value": 2
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "percentage",
"value": 3
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "tokens",
"value": 4
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "percentage",
"value": 5
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "tokens",
"value": 6
},
{
"address" :"0x56B2e3C3cFf7f3921Dc2e0F8B8e20d1eEc29216b",
"dimension": "percentage",
"value":7
},
{
"address" :"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"dimension": "tokens",
"value": 8
},
{
"address" :"0xd13c7924241E51Eb013003490736e6169a15786a",
"dimension": "percentage",
"value": 9
},
{
"address" :"0xBC4023Baef7B812c23f21bc0b108A188243b07Cb",
"dimension": "tokens",
"value": 10
}, {
"address" :"0x2589bd7D8A58Ac9A4aC01d68A7c63315ef184c63",
"dimension": "percentage",
"value": 11
},
{
"address" :"0xF3eA35DB8F0058b4e0aD45F883172E92fdCb4B82",
"dimension": "tokens",
"value": 12
}, {
"address" :"0xb3b4F4b5568BB6dF78e4d96Ad30A5538C913D495",
"dimension": "percentage",
"value": 13
},
{
"address" :"0x16926399BAF474Cd314E6425ace67A88EA5BeA11",
"dimension": "tokens",
"value": 14
}, {
"address" :"0xE98055678d8e8724E5106b059e88557a99561007",
"dimension": "percentage",
"value": 15
},
{
"address" :"0x06554522da78D90015a12C5caaf96be2999ea3F9",
"dimension": "tokens",
"value": 16
}, {
"address" :"0x5537F8335625adB9f95Dfa6E7AfE3A2AF600084B",
"dimension": "percentage",
"value": 17
},
{
"address" :"0x1894F11ddf864CA1de4eB339512a79e199cbf194",
"dimension": "tokens",
"value": 18
}, {
"address" :"0xeec3B3A65E3157b19605911615218B33772d5da2",
"dimension": "percentage",
"value": 19
},
{
"address" :"0xec8Af49612F4EdfcD069B8cfe95552740c6849e0",
"dimension": "tokens",
"value": 20
}, {
"address" :"0x9613130348aC610732A391063CD70b5a8c186EfC",
"dimension": "percentage",
"value": 21
},
{
"address" :"0x7Bc397b1F42bB521cEadE2509f8deAF477C7BEd6",
"dimension": "tokens",
"value": 22
}, {
"address" :"0x8632cc8620f7aA794aC1a3b88e0D07E4BF133638",
"dimension": "percentage",
"value": 23
},
{
"address" :"0xd540257890329448fB721B6A1bB562Bb95BA0eb7",
"dimension": "tokens",
"value": 24
}, {
"address" :"0x8e4aD05Ae00C76a371B3Ab96AD739401ec63BCDA",
"dimension": "percentage",
"value": 25
},
{
"address" :"0xd3E49136aBdAda1EeD2df2ed7c7D530c1b54afcD",
"dimension": "tokens",
"value": 26
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "percentage",
"value": 1
},
{
"address" :"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"dimension": "tokens",
"value": 2
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "percentage",
"value": 3
},
{
"address" :"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"dimension": "tokens",
"value": 4
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "percentage",
"value": 5
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "tokens",
"value": 6
},
{
"address" :"0x56B2e3C3cFf7f3921Dc2e0F8B8e20d1eEc29216b",
"dimension": "percentage",
"value":7
},
{
"address" :"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"dimension": "tokens",
"value": 8
},
{
"address" :"0xd13c7924241E51Eb013003490736e6169a15786a",
"dimension": "percentage",
"value": 9
},
{
"address" :"0xBC4023Baef7B812c23f21bc0b108A188243b07Cb",
"dimension": "tokens",
"value": 10
}, {
"address" :"0x2589bd7D8A58Ac9A4aC01d68A7c63315ef184c63",
"dimension": "percentage",
"value": 11
},
{
"address" :"0xF3eA35DB8F0058b4e0aD45F883172E92fdCb4B82",
"dimension": "tokens",
"value": 12
}, {
"address" :"0xb3b4F4b5568BB6dF78e4d96Ad30A5538C913D495",
"dimension": "percentage",
"value": 13
},
{
"address" :"0x16926399BAF474Cd314E6425ace67A88EA5BeA11",
"dimension": "tokens",
"value": 14
}, {
"address" :"0xE98055678d8e8724E5106b059e88557a99561007",
"dimension": "percentage",
"value": 15
},
{
"address" :"0x06554522da78D90015a12C5caaf96be2999ea3F9",
"dimension": "tokens",
"value": 16
}, {
"address" :"0x5537F8335625adB9f95Dfa6E7AfE3A2AF600084B",
"dimension": "percentage",
"value": 17
},
{
"address" :"0x1894F11ddf864CA1de4eB339512a79e199cbf194",
"dimension": "tokens",
"value": 18
}, {
"address" :"0xeec3B3A65E3157b19605911615218B33772d5da2",
"dimension": "percentage",
"value": 19
},
{
"address" :"0xec8Af49612F4EdfcD069B8cfe95552740c6849e0",
"dimension": "tokens",
"value": 20
}, {
"address" :"0x9613130348aC610732A391063CD70b5a8c186EfC",
"dimension": "percentage",
"value": 21
},
{
"address" :"0x7Bc397b1F42bB521cEadE2509f8deAF477C7BEd6",
"dimension": "tokens",
"value": 22
}, {
"address" :"0x8632cc8620f7aA794aC1a3b88e0D07E4BF133638",
"dimension": "percentage",
"value": 23
},
{
"address" :"0xd540257890329448fB721B6A1bB562Bb95BA0eb7",
"dimension": "tokens",
"value": 24
}, {
"address" :"0x8e4aD05Ae00C76a371B3Ab96AD739401ec63BCDA",
"dimension": "percentage",
"value": 25
},
{
"address" :"0xd3E49136aBdAda1EeD2df2ed7c7D530c1b54afcD",
"dimension": "tokens",
"value": 26
}
],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/12/2018",
"startTime": "07:30pm",
"endDate":"02/12/2018",
"endTime":"08:35pm",
"rate":100,
"supply": 100,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

1018
scenarios/T1RyWn_0014.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,51 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T1RyWy_0013.json",
"ticker": "t0013",
"decimals": 3,
"reservedTokens":[
{
"address" :"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"dimension": "percentage",
"value": 60
},
{
"address" :"0x41B4073E966c169dB22185805A951A0f1b805320",
"dimension": "tokens",
"value": 2000
}
],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/12/2018",
"startTime": "07:30pm",
"endDate":"02/12/2018",
"endTime":"07:40pm",
"rate":1000,
"supply": 1000,
"whitelist":[
{
"address":"0x27F2f56e6Ee35E4995A965337ba2A7b4ec492FcC",
"min":6,
"max":100
},
{
"address":"0x41B4073E966c169dB22185805A951A0f1b805320",
"min":8,
"max":55
}]
}]
}

View File

@ -0,0 +1,55 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T2RnWyMy_0016.json",
"ticker": "t0016",
"decimals": 2,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/13/2018",
"startTime": "11:49am",
"endDate":"02/13/2018",
"endTime":"11:55pm",
"rate":100,
"supply": 150,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":100
}
]
},
{
"name":"###2",
"allowModify": true,
"startDate": "02/13/2018",
"startTime": "11:56pm",
"endDate":"02/13/2018",
"endTime":"11:57pm",
"rate":100,
"supply": 150,
"whitelist":[
{
"address":"0x41B4073E966c169dB22185805A951A0f1b805320",
"min":0,
"max":100
}]
}]
}

View File

@ -0,0 +1,54 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T2RnWy 02/10/18",
"ticker": "test",
"decimals": 3,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "11:00am",
"endDate":"02/10/2018",
"endTime":"11:10am",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":9,
"max":90
}
]
},
{
"name":"###2",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "11:15am",
"endDate":"02/10/2018",
"endTime":"11:25pm",
"rate":100,
"supply": 100,
"whitelist":[
{
"address":"0x41B4073E966c169dB22185805A951A0f1b805320",
"min":6,
"max":100
}]
}]
}

View File

@ -0,0 +1,55 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T2RnWy_0001.json",
"ticker": "test",
"decimals": 2,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "11:45am",
"endDate":"02/10/2018",
"endTime":"11:55am",
"rate":100,
"supply": 150,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":100
}
]
},
{
"name":"###2",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "11:56am",
"endDate":"02/10/2018",
"endTime":"12:10pm",
"rate":100,
"supply": 150,
"whitelist":[
{
"address":"0x41B4073E966c169dB22185805A951A0f1b805320",
"min":0,
"max":100
}]
}]
}

67
scenarios/T2RyWy.json Normal file
View File

@ -0,0 +1,67 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T2RyWy",
"ticker": "MSCqj",
"decimals": 3,
"reservedTokens":[
{
"address" :"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"dimension": "percentage",
"value": 20
},
{
"address" :"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"dimension": "tokens",
"value": 10
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/08/2018",
"startTime": "11:15pm",
"endDate":"02/08/2018",
"endTime":"11:45pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###2",
"allowModify": true,
"startDate": "02/09/2018",
"startTime": "11:15pm",
"endDate":"02/09/2018",
"endTime":"11:45pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x6f53002497203d167771eb0852b4c1caDA7a585f",
"min":6,
"max":100
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}]
}

55
scenarios/T3RnWn.json Normal file
View File

@ -0,0 +1,55 @@
{
"account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T3RnWn",
"ticker": "MSC",
"decimals": 3,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":false,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/08/2018",
"startTime": "11:45pm",
"endDate":"02/08/2018",
"endTime":"11:55pm",
"rate":100,
"supply": 200
},
{
"name":"###2",
"allowModify": true,
"startDate": "02/09/2018",
"startTime": "00:15am",
"endDate":"02/09/2018",
"endTime":"00:30am",
"rate":100,
"supply": 400
},
{
"name":"###3",
"allowModify": true,
"startDate": "02/09/2018",
"startTime": "00:45am",
"endDate":"02/09/2018",
"endTime":"00:55am",
"rate":100,
"supply": 600
}
]
}

147
scenarios/T6RnWy.json Normal file
View File

@ -0,0 +1,147 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T6RnWy_02/09/18 7:05pm",
"ticker": "MSC",
"decimals": 3,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": true,
"startDate": "02/11/2018",
"startTime": "7:40pm",
"endDate":"02/11/2018",
"endTime":"7:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###2",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "8:40pm",
"endDate":"02/10/2018",
"endTime":"8:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###3",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "9:40pm",
"endDate":"02/10/2018",
"endTime":"9:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###4",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "10:40pm",
"endDate":"02/10/2018",
"endTime":"10:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###5",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "11:40pm",
"endDate":"02/10/2018",
"endTime":"11:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
},
{
"name":"###6",
"allowModify": true,
"startDate": "02/10/2018",
"startTime": "11:51pm",
"endDate":"02/10/2018",
"endTime":"11:59pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":20
},
{
"address":"0x42f0143F2E9Ab64CA3811bbA08E40D798C18E7f4",
"min":8,
"max":55
}]
}
]
}

101
scenarios/T6RnWy_0004.json Normal file
View File

@ -0,0 +1,101 @@
{ "account": "0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"privateKey": "03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0",
"networkID":4,
"name": "T6RnWy_0004.json",
"ticker": "MSC",
"decimals": 6,
"reservedTokens":[
{
},
{
}],
"walletAddress":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411",
"gasprice": 40,
"mincap": 1,
"whitelisting":true,
"tiers":[
{
"name":"###1",
"allowModify": false,
"startDate": "02/10/2018",
"startTime": "01:15pm",
"endDate":"02/10/2018",
"endTime":"01:35pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"min":0,
"max":100
}]
},
{
"name":"###2",
"allowModify": false,
"startDate": "02/10/2018",
"startTime": "01:40pm",
"endDate":"02/10/2018",
"endTime":"01:50pm",
"rate":100,
"supply": 200,
"whitelist":[
{
"address":"0x41B4073E966c169dB22185805A951A0f1b805320",
"min":10,
"max":200
}]
},
{
"name":"###3",
"allowModify": false,
"startDate": "02/10/2018",
"startTime": "01:55pm",
"endDate":"02/10/2018",
"endTime":"01:59pm",
"rate":100,
"supply": 200,
"whitelist":[
]
},
{
"name":"###4",
"allowModify": false,
"startDate": "02/10/2018",
"startTime": "02:05pm",
"endDate":"02/10/2018",
"endTime":"02:09pm",
"rate":100,
"supply": 200,
"whitelist":[
]
},
{
"name":"###5",
"allowModify": false,
"startDate": "02/10/2018",
"startTime": "02:10pm",
"endDate":"02/10/2018",
"endTime":"02:14pm",
"rate":100,
"supply": 200,
"whitelist":[
]
},
{
"name":"###6",
"allowModify": false,
"startDate": "02/10/2018",
"startTime": "02:15pm",
"endDate":"02/10/2018",
"endTime":"02:19pm",
"rate":100,
"supply": 200,
"whitelist":[
]
}
]
}

7
testAccounts.json Normal file
View File

@ -0,0 +1,7 @@
{
"address":"0x40cAa4BF6893dF91638305cFCf98CB8E7Fa8D17F",
"address":"0x41B4073E966c169dB22185805A951A0f1b805320",
"address":"0x56B2e3C3cFf7f3921Dc2e0F8B8e20d1eEc29216b",
"address":"0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411"
}

20
tests/BaseTest.js Normal file
View File

@ -0,0 +1,20 @@
console.log(module.filename);
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
class BaseTest{
constructor(driver){
this.driver=driver;
}
run(){
console.log('SuperTestBase')
};
}
module.exports.BaseTest=BaseTest;

40
tests/Test1.js Normal file
View File

@ -0,0 +1,40 @@
//const Web3 = require('web3');
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
const baseTest=require('./BaseTest.js');
const BaseTest=baseTest.BaseTest;
const owner=require('../entity/Owner.js');
const Owner=owner.Owner;
const metaMask=require('../pages/MetaMask.js');
const MetaMask=metaMask.MetaMask;
const metaMaskWallet=require('../entity/MetaMaskWallet.js');
const MetaMaskWallet=metaMaskWallet.MetaMaskWallet;
class Test1 extends BaseTest {
constructor(driver) {
super(driver);
}
async run() {
var account='./owners/owner1.json';
var scenario='./scenarios/T1RnWy.json';
var own=new Owner(this.driver,account);
var crowdsale=await own.createCrowdsale(scenario);
console.log("TokenAddress"+crowdsale.tokenAddress);
console.log("ContractAddress"+crowdsale.contractAddress);
console.log("url"+crowdsale.url);
own.openManage();
}
}
module.exports.Test1=Test1;

73
tests/Test2.js Normal file
View File

@ -0,0 +1,73 @@
//const Web3 = require('web3');
const key = require('selenium-webdriver').Key;
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const By=by.By;
const wizardWelcome=require('../pages/WizardWelcome.js');
const meta=require('../pages/MetaMask.js');
const managePage=require('../pages/ManagePage.js');
const ManagePage=managePage.ManagePage;
const baseTest=require('./BaseTest.js');
const utils=require('../utils/Utils.js');
const Utils=utils.Utils;
const Web3 = require('web3');
const fs = require('fs');
const metaMaskWallet=require('../entity/MetaMaskWallet.js');
const MetaMaskWallet=metaMaskWallet.MetaMaskWallet;
class Test2 extends baseTest.BaseTest {
constructor(driver,configFile) {
super(driver);
this.configFile=configFile;
}
async run() {
const utils=new Utils();
var startURL=utils.getStartURL(this.configFile);
var welcomePage = new wizardWelcome.WizardWelcome(this.driver,startURL);
var scenarioFile=utils.getScenarioFile(this.configFile);
var wallet=MetaMaskWallet.createMetaMaskWallet(scenarioFile);
var metaMask = new meta.MetaMask(this.driver,wallet);
var mngPage=new ManagePage(this.driver);
metaMask.open();
metaMask.activate();
welcomePage.switchToAnotherPage();
welcomePage.open();
welcomePage.clickButtonChooseContract();
do {} while(!await mngPage.isAvailable());
var contract="0x7eB29E0922C87D728c81A9FAB66e97668c917108";
mngPage.URL=startURL+"manage/"+contract;
mngPage.open();
//this.driver.sleep(5000);
do{
} while(!await mngPage.isPresentButtonFinalize());
console.log(await mngPage.isAvailableDistribute());
mngPage.clickButtonFinalize();
// if (mngPage.isAvailableDistribute())mngPage.clickButtonDistribute();
//if (mngPage.isAvailableFinalize()) mngPage.clickButtonFinalize();
}
}
module.exports.Test2=Test2;

36
tests/Test3.js Normal file
View File

@ -0,0 +1,36 @@
const baseTest=require('./BaseTest.js');
const BaseTest=baseTest.BaseTest;
const investPage=require('../pages/InvestPage.js');
const InvestPage=investPage.InvestPage;
const metaMaskWallet=require('../entity/MetaMaskWallet.js');
const MetaMaskWallet=metaMaskWallet.MetaMaskWallet;
const metaMask=require('../pages/MetaMask.js');
const MetaMask=metaMask.MetaMask;
class Test3 extends BaseTest
{
constructor(driver) {
super(driver);
}
async run()
{
var wallet=new MetaMaskWallet();
wallet.account="0xF16AB2EA0a7F7B28C267cbA3Ed211Ea5c6e27411";
wallet.privateKey="03c06a9fab22fe0add145e337c5a8251e140f74468d72eab17ec7419ab812cd0";
wallet.networkID="4";
var metaMask = new MetaMask(this.driver,wallet);
metaMask.switchToAnotherPage();
metaMask.chooseProvider(4);
metaMask.switchToAnotherPage();
var e=new InvestPage(this.driver);
this.driver.get("https://wizard.poa.network/invest?addr=0xcB82AF7fD8Baa5A144Eaa90101c4901D987f9bf5&networkID=4")
this.driver.sleep(1000);
console.log(await e.getTokenAddress());
console.log(await e.getContractAddress());
console.log(await e.getURL());
}
}
module.exports.Test3=Test3;

109
utils/Utils.js Normal file
View File

@ -0,0 +1,109 @@
//console.log(module.filename);
const webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome'),
firefox = require('selenium-webdriver/firefox'),
by = require('selenium-webdriver/lib/by');
const fs = require('fs');
const Web3 = require('web3');
class Utils {
openAnotherTab(driver, URL) {
driver.executeScript('window.open("' + URL + '");');
}
focusOn(driver) {
driver.executeScript('alert("Focus window")');
driver.switchTo().alert().accept();
}
getStartURL(fileName) {
var obj = JSON.parse(fs.readFileSync(fileName, "utf8"));
return obj.startURL;
}
getInstallMetamask(fileName) {
var obj = JSON.parse(fs.readFileSync(fileName, "utf8"));
return obj.installMetaMask;
}
print(arr) {
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
getTransactionCount(address) {
var w = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/"));
var n = w.eth.getTransactionCount(address.toString());//returns Number
//console.log(n);
fs.writeFileSync("tempAddr.txt", n);
return n;
}
takeScreenshoot(driver, path) {
driver.takeScreenshot()
.then((res) => {
//console.log(res);
var d = new Date();
var buf = new Buffer(res, 'base64');
fs.writeFileSync('./artifacts/screenshoot' + d.getTime() + '.png', buf);//for circleci
fs.writeFileSync(path + "/screenshoot" + d.getTime() + '.png', buf);
});
}
startBrowser() {
var options = new chrome.Options();
//options.addArguments("user-data-dir=/home/d/GoogleProfile");
//options.addArguments('start-maximized');
options.addArguments('disable-popup-blocking');
options.addArguments('test-type');
return new webdriver.Builder().withCapabilities(options.toCapabilities()).build();
}
startBrowserWithMetamask() {
var source = 'MetaMask.crx';
if (!fs.existsSync(source)) source = './node_modules/create-poa-crowdsale/MetaMask.crx';
console.log(source);
var options = new chrome.Options();
options.addExtensions(source);
//options.addArguments("user-data-dir=/home/d/GoogleProfile");
//options.addArguments("user-data-dir=/home/d/.config/google-chrome/");
options.addArguments('start-maximized');
options.addArguments('disable-popup-blocking');
//options.addArguments('test-type');
return new webdriver.Builder().withCapabilities(options.toCapabilities()).build();
}
getScenarioFile(fileName) {
var obj = JSON.parse(fs.readFileSync(fileName, "utf8"));
return obj.scenario;
}
zoom(driver,z){
driver.executeScript
("document.body.style.zoom = '"+z+"'");
}
}
module.exports={
Utils:Utils
}