├── requirements.txt
├── .gitignore
├── .github
├── FUNDING.yml
└── assets
│ └── Auto-StockTrader-Banner.jpeg
├── src
├── Selenium-IDE.crx
├── Helper_Scripts
│ ├── SoFi_Account_Array.js
│ ├── README.MD
│ ├── RSA-QuickStart.sh
│ ├── Fidelity_Account_Array.js
│ └── RSA-QuickStart.bat
├── README.MD
└── Selenium_IDE
│ ├── Sofi Helper.side
│ ├── Firstrade_Auto.side
│ ├── Account_Management_Tools.side
│ ├── Fidelity_Auto.side
│ ├── Merrill_Auto.side
│ └── Schwab_Auto.side
├── LICENSE
├── .env.example
├── main.py
└── README.md
/requirements.txt:
--------------------------------------------------------------------------------
1 | python-dotenv
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | .env
3 | test*
4 | Master*.side
5 | Ticker*.side
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [Prem-ium]
2 | custom: https://www.buymeacoffee.com/prem.ium
3 |
--------------------------------------------------------------------------------
/src/Selenium-IDE.crx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prem-ium/Auto-StockTrader/HEAD/src/Selenium-IDE.crx
--------------------------------------------------------------------------------
/.github/assets/Auto-StockTrader-Banner.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prem-ium/Auto-StockTrader/HEAD/.github/assets/Auto-StockTrader-Banner.jpeg
--------------------------------------------------------------------------------
/src/Helper_Scripts/SoFi_Account_Array.js:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | Login to Sofi's Invest Homepage on your browser and run this script in the console.
4 | */
5 | const accountNumbers = [];
6 | const links = document.getElementsByTagName("a");
7 | for (let i = 0; i < links.length; i++) {
8 | const href = links[i].getAttribute("href");
9 | if (href && href.includes("account/") && !href.includes("/wealth/app/")) {
10 | const accountNumber = href.replace("account/", "");
11 | accountNumbers.push(accountNumber);
12 | }
13 | }
14 | console.log(accountNumbers);
15 |
--------------------------------------------------------------------------------
/src/Helper_Scripts/README.MD:
--------------------------------------------------------------------------------
1 | # Helper Scripts
2 |
3 | This folder contains essential sub-scripts to facilitate your project tasks.
4 |
5 | ## Fidelity_Account_Array.js
6 |
7 | This script is designed to be executed within your browser's console to swiftly retrieve your Fidelity account numbers.
8 |
9 | ### Instructions:
10 |
11 | 1. Open Fidelity Portfolio.
12 | 2. Run this Script in the Console.
13 | 3. Copy the generated Array.
14 | 4. Paste it into the Fidelity environment variable in the `.env` file.
15 |
16 | ## SoFi_Account_Array.js
17 |
18 | Similar to `Fidelity_Account_Array.js`, this script facilitates the gathering of account information for Sofi.
19 |
20 | ### Instructions:
21 |
22 | 1. Log in to Sofi's Invest Homepage on your browser.
23 | 2. Execute this script in the console.
24 |
--------------------------------------------------------------------------------
/src/Helper_Scripts/RSA-QuickStart.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Set directory variable to the path of the project folder
3 | DIRECTORY=
4 |
5 | # Change to the project directory
6 | if [ -d "$DIRECTORY" ]; then
7 | cd "$DIRECTORY" || { echo "Failed to change directory to $DIRECTORY"; exit 1; }
8 | else
9 | echo "Directory $DIRECTORY does not exist."
10 | exit 1
11 | fi
12 |
13 | read -p "Enter the ticker symbol: " ticker
14 |
15 | # REPLACE THE PATH BELOW WITH YOUR OWN PATH TO THE PROJECT FOLDER
16 | cd /path/to/your/project
17 |
18 | python3 main.py $ticker
19 |
20 | # Examples of quickstarting with different browsers and profiles
21 | # Uncomment the lines below to enable them.
22 |
23 | # read -p "Do you want to open browsers? (y/n): " open_browsers
24 | # if [ "$open_browsers" == "y" ]; then
25 | # /path/to/msedge --profile-directory="Default" &
26 | # /path/to/brave --profile-directory="Default" &
27 | # /path/to/brave --profile-directory="Profile 1" &
28 | # fi
29 |
30 | sleep 15
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2023-Present, Prem Patel
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 |
8 | 1. Redistributions of source code must retain the above copyright notice, this
9 | list of conditions and the following disclaimer.
10 |
11 | 2. Redistributions in binary form must reproduce the above copyright notice,
12 | this list of conditions and the following disclaimer in the documentation
13 | and/or other materials provided with the distribution.
14 |
15 | 3. Neither the name of the copyright holder nor the names of its
16 | contributors may be used to endorse or promote products derived from
17 | this software without specific prior written permission.
18 |
19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 |
--------------------------------------------------------------------------------
/src/Helper_Scripts/Fidelity_Account_Array.js:
--------------------------------------------------------------------------------
1 | // Instructions for Non-Technical Users:
2 |
3 | // 1. Login & Open Fidelity Portfolio Webpage (https://digital.fidelity.com/ftgw/digital/portfolio)
4 |
5 | // 2. Access the Browser's Developer Tools:
6 | // - If you're using Google Chrome or Microsoft Edge: Right-click anywhere on the webpage, then click "Inspect."
7 | // - If you're using Mozilla Firefox: Right-click anywhere on the webpage, then select "Inspect Element."
8 |
9 | // 3. Copy and Paste the Script:
10 | // - In the Developer Tools panel, find the "Console" tab or section.
11 | // - Copy the entire script
12 | // - Paste the script into the space in the Console.
13 |
14 | // 4. Run the Script:
15 | // - After pasting the script, press "Enter" on your keyboard. The script will execute, and you'll see numbers in the Console.
16 |
17 | // 5. Copy the Numbers:
18 | // - Select all the numbers in the Console by clicking and dragging your mouse cursor.
19 | // - Right-click on the selected numbers and choose "Copy."
20 |
21 | // 6. Paste the Numbers into .env file:
22 | // - Open the ".env" file using a text editor like Visual Studio Code, Notepad or TextEdit.
23 | // - Paste copied array intot he Fidelity_AI env variable
24 | // - Save the ".env" file.
25 |
26 | // You can also use the Fidelity side project login test, with index of 1, to obtain the account numbers.
27 |
28 | // Get all elements with the class name "acct-selector__acct-num"
29 | const elements = document.getElementsByClassName("acct-selector__acct-num");
30 |
31 | // Create an array to store the text content
32 | const textArray = [];
33 |
34 | // Iterate through the elements and store the trimmed text content in the array
35 | for (let i = 0; i < elements.length; i++) {
36 | const text = elements[i].textContent.trim();
37 | textArray.push(text);
38 | }
39 |
40 | // Print the array
41 | console.log(textArray);
42 |
--------------------------------------------------------------------------------
/src/Helper_Scripts/RSA-QuickStart.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | setlocal
3 |
4 | REM set directory variable to the path of the project folder
5 | set directory=
6 |
7 | REM Display examples of usage
8 | echo 1. Pass a Stock Ticker as an argument to update all .side files:
9 | echo Enter: AAPL
10 | echo.
11 | echo 2. Separate multiple tickers with commas:
12 | echo Enter: NVDA,TSLA,AAPL
13 | echo.
14 |
15 | set /p arguments=Enter tickers (comma-separated):
16 |
17 | REM Navigate to the project folder using the directory variable
18 | cd %directory%
19 |
20 | python main.py %arguments%
21 |
22 | choice /c yn /n /m "Do you want to open browsers? (y/n): " /t 10 /d n
23 | set open_browsers=%errorlevel%
24 |
25 | if %open_browsers%==1 (
26 | echo Attempting to open browsers...
27 |
28 | REM Attempt to open Brave Browser
29 | if exist "%ProgramFiles%\BraveSoftware\Brave-Browser\Application\brave.exe" (
30 | echo Opening Brave...
31 | start "" "%ProgramFiles%\BraveSoftware\Brave-Browser\Application\brave.exe" --new-window --app="chrome-extension://mooikfkahbdckldjjndioackbalphokd/index.html"
32 | ) else if exist "%ProgramFiles(x86)%\BraveSoftware\Brave-Browser\Application\brave.exe" (
33 | echo Opening Brave...
34 | start "" "%ProgramFiles(x86)%\BraveSoftware\Brave-Browser\Application\brave.exe" --new-window --app="chrome-extension://mooikfkahbdckldjjndioackbalphokd/index.html"
35 | ) else if exist "%LocalAppData%\BraveSoftware\Brave-Browser\Application\brave.exe" (
36 | echo Opening Brave...
37 | start "" "%LocalAppData%\BraveSoftware\Brave-Browser\Application\brave.exe" --new-window --app="chrome-extension://mooikfkahbdckldjjndioackbalphokd/index.html"
38 | ) else (
39 | echo Brave not found.
40 | )
41 |
42 | REM Attempt to open Microsoft Edge
43 | if exist "%ProgramFiles%\Microsoft\Edge\Application\msedge.exe" (
44 | echo Opening Edge...
45 | start "" "%ProgramFiles%\Microsoft\Edge\Application\msedge.exe" --app="chrome-extension://ajdpfmkffanmkhejnopjppegokpogffp/index.html"
46 | ) else if exist "%ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe" (
47 | echo Opening Edge...
48 | start "" "%ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe" --app="chrome-extension://ajdpfmkffanmkhejnopjppegokpogffp/index.html"
49 | ) else if exist "%LocalAppData%\Microsoft\Edge\Application\msedge.exe" (
50 | echo Opening Edge...
51 | start "" "%LocalAppData%\Microsoft\Edge\Application\msedge.exe" --app="chrome-extension://ajdpfmkffanmkhejnopjppegokpogffp/index.html"
52 | ) else (
53 | echo Edge not found.
54 | )
55 | echo Finished attempting to open browsers.
56 | ) else (
57 | echo Browsers will not be opened.
58 | )
59 |
60 | timeout /t 3 /nobreak >nul
61 | endlocal
--------------------------------------------------------------------------------
/src/README.MD:
--------------------------------------------------------------------------------
1 | # 📈 Additional Help: Automating Stock Trades with Selenium IDE
2 |
3 | This guide explains how to retrieve the sensitive account information required for automation and how to correctly configure your `.env` file using the format provided in `env.example`.
4 |
5 | > 💎 For a seamless experience without manual configuration for Chase/Fidelity/Ally, [consider becoming a **Gold Sponsor**](https://github.com/sponsors/Prem-ium) to unlock premium features and ready-to-run scripts.
6 |
7 | ---
8 |
9 | ## 🏦 Chase Automation
10 |
11 | Automate trades on **J.P. Morgan Self-Directed Investing** using the `Chase_Auto.side` file and the Selenium IDE extension.
12 |
13 | ### 🔍 Retrieve Account Identifiers
14 |
15 | 1. Navigate to the Chase [Trade Stocks page](https://secure07ea.chase.com/web/auth/dashboard#/dashboard/trade/equity/entry).
16 | 2. Select your account from the dropdown.
17 | 3. Copy the **AI number** from the URL. It will look like this:
18 |
19 | ```
20 | https://secure07ea.chase.com/web/auth/dashboard#/dashboard/trade/equity/entry;ai={YOUR_AI_HERE};sym=
21 | ```
22 |
23 | 
24 |
25 | ### 🧪 Update Test Cases in Selenium IDE
26 |
27 | Replace the `return` statement in each Buy/Sell test case:
28 |
29 | ```javascript
30 | return [['54658965', 'YOUR', 'AI', 'GOES', 'HERE'], ['YOUR', 'AI', 'for-another-login', 'GOES', 'HERE']]
31 | ```
32 |
33 | ### 💹 Provide Stock Ticker
34 |
35 | Add your stock ticker as a `return` statement:
36 |
37 | ```javascript
38 | return "STOCK_TICKER"
39 | ```
40 |
41 | Start the test to execute the trade.
42 |
43 | ---
44 |
45 | ## 📊 Fidelity Automation
46 |
47 | 1. Log in to [Fidelity Portfolio](https://digital.fidelity.com/ftgw/digital/portfolio).
48 | 2. Open Developer Tools:
49 |
50 | * **Chrome/Edge**: Right-click → Inspect
51 | * **Firefox**: Right-click → Inspect Element
52 | 3. Copy and paste the [Fidelity Account Array Script](https://github.com/Prem-ium/Auto-StockTrader/blob/main/src/Helper_JS_Scripts/Fidelity_Account_Array.js) into the **Console** tab.
53 | 4. Press **Enter** to run the script. It will output account numbers.
54 | 5. Copy the resulting array.
55 | 6. Paste it into the `.env` file under:
56 |
57 | ```env
58 | FIDELITY_AI=["12345678", "23456789"]
59 | ```
60 |
61 | > 🧪 Tip: You can also run the Fidelity login test in the `.side` file (index `1`) to retrieve account IDs.
62 |
63 | ---
64 |
65 | ## 📈 Ally Invest Automation
66 |
67 | 1. On the [Ally Invest Settings Page](https://live.invest.ally.com/settings), change default orders to a low-risk penny stock (e.g., Quantity: 1, Order Type: Market).
68 | 2. Install and open the **Selenium IDE** browser extension.
69 | 3. Log in to **Ally**, **Vanguard**, or **Firstrade** in your browser.
70 | 4. Add account numbers to the test script:
71 |
72 | ```javascript
73 | return ["54566343", "34546546", "54566546"]
74 | ```
75 |
76 | 5. Add the stock ticker and (optionally) a limit price:
77 |
78 | ```javascript
79 | return "TICKER"
80 | return "LIMIT_PRICE"
81 | ```
82 |
83 | 6. Start the test to run automation.
84 |
85 | 
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | # main.py Selenium IDE .side config
2 |
3 | # Number of Schwab Accounts
4 | # Type: Integer
5 | # Example: SCHWAB_AI=20
6 | SCHWAB_AI=
7 |
8 | # Number of Merrill Accounts
9 | # Type:Integer
10 | # Example: MERRILL_AI = 4
11 | MERRILL_AI=
12 |
13 | # Number of Robinhood Accounts (Gold Sponsor Early Access Only)
14 | # Type: Integer
15 | # Example: ROBINHOOD_AI=20
16 | ROBINHOOD_AI=
17 |
18 | # Number of WELLSTRADE Accounts (Gold Sponsor Exclusive)
19 | # Type: Integer
20 | # Example: WELLSTRADE_AI=20
21 | WELLSTRADE_AI=
22 |
23 | # Number of Vanguard Accounts
24 | # Type: Integer
25 | # Example: VANGUARD_AI = 4
26 | VANGUARD_AI=
27 |
28 | # List of account numbers for Fidelity Auto.side file
29 | # Type: Nested List of Strings
30 | # If you have one login, use this format:
31 | # Example: FIDELITY_AI=[['111111111','222222222','333333333']]
32 | # If you have multiple logins, use this format:
33 | # Example: FIDELITY_AI=[['111111111','222222222','333333333'],['444444444','555555555','666666666']]
34 | FIDELITY_AI=[['YOUR','ACCOUNT','NUMBERS','HERE'],['ANOTHER','ACCOUNT','HERE']];
35 |
36 | # Account ID for Chase Auto.side file
37 | # Type: Nested List of Strings
38 | # If you have one login, use this format:
39 | # Example: CHASE_AI="[['1234567890','34554654']]"
40 | # If you have multiple logins, use this format:
41 | # Example: CHASE_AI="[['1234567890','34554654'], ['1234567890','34554654']]"
42 | # (Retrieve the number at {YOUR_AI_HERE}): `https://secure07ea.chase.com/web/auth/dashboard#/dashboard/trade/equity/entry;ai={YOUR_AI_HERE};sym=`)
43 | # Photo Example: https://user-images.githubusercontent.com/80719066/216079858-746af166-8387-41ad-9564-dd0c6285eb39.png
44 | CHASE_AI=[['YOUR','ACCOUNT','NUMBERS','HERE'],['ANOTHER','ACCOUNT','HERE']]
45 |
46 | # List of account names for Ally Auto.side file
47 | # Type: List of Strings
48 | # Example: ALLY_AI="['Account Name 1','Account Name 2']"
49 | # WARNING: In [Ally Invest Settings Webpage](https://live.invest.ally.com/settings), change the default orders on the settings
50 | # for all accounts to be a small penny stock for default stock ticker to miminize risk, Market, & Quantity: 1.
51 | ALLY_AI="['YOUR','ACCOUNT','NAMES','HERE']"
52 |
53 | # List of account numbers for Firstrade Auto.side file
54 | # Type: List of Strings
55 | # Example: FIRSTRADE_AI="['1234567890']"
56 | FIRSTRADE_AI="['YOUR','ACCOUNT','NUMBERS','HERE']"
57 |
58 | # Path to the folder where you want to store the .side files
59 | # Type: String
60 | # Example: CUSTOM_DIR='C:\Users\Premium\Desktop\CodingProjects\SeleniumFolder'
61 | CUSTOM_DIR='C:\Users\Premium\Desktop\CodingProjects\SeleniumFolder'
62 |
63 | # Dynamic Account Number
64 | # Type: Int
65 | # Default: 0
66 | DYNAMIC=1
67 |
68 | # Sofi Invest (Archived)
69 |
70 | # Selenium Extension
71 | # List of account numbers for Sofi Helper Auto.side file
72 | # Type: List of Strings
73 | # Example: SOFI_AI="['1354546','2657657']"
74 | SOFI_AI="['YOUR','ACCOUNT','NUMBERS','HERE']"
75 |
76 | # Account Credentials Seperated by ':'
77 | # Type: String
78 | # Used to attempt to enter credentials, or login where possible. Beta feature. Still in development.
79 | CHASE_LOGIN="USERNAME:PASSWORD"
80 | FIDELITY_LOGIN="USERNAME:PASSWORD"
81 | FIRSTADE_LOGIN="USERNAME:PASSWORD"
82 | MERRILL_LOGIN="USERNAME:PASSWORD"
83 | SCHWAB_LOGIN="USERNAME:PASSWORD"
84 | ALLY_LOGIN="USERNAME:PASSWORD"
85 | VANGUARD_LOGIN="USERNAME:PASSWORD"
86 |
--------------------------------------------------------------------------------
/src/Selenium_IDE/Sofi Helper.side:
--------------------------------------------------------------------------------
1 | {
2 | "id": "3754741b-c246-46fd-a4b9-61df42906362",
3 | "version": "2.0",
4 | "name": "Sofi Helper",
5 | "url": "https://www.sofi.com/wealth/",
6 | "tests": [{
7 | "id": "00fe9fca-2260-4ca5-beee-945eb08cc90k",
8 | "name": "Sofi",
9 | "commands": [{
10 | "id": "431f11b5-635e-458b-8360-9531d5f5dbe5",
11 | "comment": "",
12 | "command": "store",
13 | "target": "ARVL",
14 | "targets": [],
15 | "value": "TICKER"
16 | }, {
17 | "id": "b6ca055f-d2c7-4f83-a187-43da6ecaa44e",
18 | "comment": "",
19 | "command": "executeScript",
20 | "target": "return ['YOUR_ACCOUNTS','HERE'];",
21 | "targets": [],
22 | "value": "accounts"
23 | }, {
24 | "id": "4956efa5-c445-44f1-9771-90e6c188c228",
25 | "comment": "",
26 | "command": "executeScript",
27 | "target": "return \"UR_ACCT_HERE\";",
28 | "targets": [],
29 | "value": "target"
30 | }, {
31 | "id": "bd5bd04d-d462-4410-ab73-b95013e7b1b8",
32 | "comment": "",
33 | "command": "store",
34 | "target": "0.13",
35 | "targets": [],
36 | "value": "LIMIT"
37 | }, {
38 | "id": "7918963f-8a4d-4d44-bd16-9f6b38a6e7d2",
39 | "comment": "",
40 | "command": "executeScript",
41 | "target": "return \"Buy\"; ",
42 | "targets": [],
43 | "value": "TYPE"
44 | }, {
45 | "id": "c5dda49f-8168-4957-a5e4-f3be2a10ea2f",
46 | "comment": "",
47 | "command": "executeScript",
48 | "target": "let list = ${accounts}; list = list.slice(list.indexOf(${target}) + 1); return list;",
49 | "targets": [],
50 | "value": "numb"
51 | }, {
52 | "id": "260a9e1a-a82b-4d45-98dc-b9ca0fcf4860",
53 | "comment": "",
54 | "command": "forEach",
55 | "target": "numb",
56 | "targets": [],
57 | "value": "account"
58 | }, {
59 | "id": "6e8d053a-4fc4-4fdb-a70b-153dc04752be",
60 | "comment": "",
61 | "command": "open",
62 | "target": "https://www.sofi.com/wealth/app/account/${account}/stock/${TICKER}/${TYPE}",
63 | "targets": [],
64 | "value": ""
65 | }, {
66 | "id": "f464bd97-5ca1-4278-9e3c-0aaa296bde79",
67 | "comment": "",
68 | "command": "click",
69 | "target": "id=input-4",
70 | "targets": [
71 | ["id=input-4", "id"],
72 | ["name=shares", "name"],
73 | ["css=#input-4", "css:finder"],
74 | ["xpath=//input[@id='input-4']", "xpath:attributes"],
75 | ["xpath=//div[@id='input-wrapper-5']/input", "xpath:idRelative"],
76 | ["xpath=//input", "xpath:position"]
77 | ],
78 | "value": ""
79 | }, {
80 | "id": "7410051f-d7d2-408c-9b08-2b18789573e2",
81 | "comment": "",
82 | "command": "type",
83 | "target": "id=input-4",
84 | "targets": [
85 | ["id=input-4", "id"],
86 | ["name=shares", "name"],
87 | ["css=#input-4", "css:finder"],
88 | ["xpath=//input[@id='input-4']", "xpath:attributes"],
89 | ["xpath=//div[@id='input-wrapper-5']/input", "xpath:idRelative"],
90 | ["xpath=//input", "xpath:position"]
91 | ],
92 | "value": "${LIMIT}"
93 | }, {
94 | "id": "521619f8-7941-4889-b3e4-be56306e2ac9",
95 | "comment": "",
96 | "command": "click",
97 | "target": "id=input-1",
98 | "targets": [
99 | ["id=input-1", "id"],
100 | ["name=value", "name"],
101 | ["css=#input-1", "css:finder"],
102 | ["xpath=//input[@id='input-1']", "xpath:attributes"],
103 | ["xpath=//main[@id='mainContent']/div/div[4]/div[2]/input", "xpath:idRelative"],
104 | ["xpath=//div[4]/div[2]/input", "xpath:position"]
105 | ],
106 | "value": ""
107 | }, {
108 | "id": "67a46219-b580-4986-84a2-ccadf12bdbd4",
109 | "comment": "",
110 | "command": "type",
111 | "target": "id=input-1",
112 | "targets": [],
113 | "value": "1"
114 | }, {
115 | "id": "6bab2c58-7aa2-44ae-b6a9-954d2e4c121a",
116 | "comment": "",
117 | "command": "click",
118 | "target": "xpath=//button[contains(.,'Review')]",
119 | "targets": [
120 | ["css=.sc-hmjpVf", "css:finder"],
121 | ["xpath=(//button[@type='button'])[3]", "xpath:attributes"],
122 | ["xpath=//main[@id='mainContent']/div/div[6]/button", "xpath:idRelative"],
123 | ["xpath=//div[6]/button", "xpath:position"],
124 | ["xpath=//button[contains(.,'Review')]", "xpath:innerText"]
125 | ],
126 | "value": ""
127 | }, {
128 | "id": "aeb20f7d-b271-48dd-ac68-68e8642b9315",
129 | "comment": "",
130 | "command": "click",
131 | "target": "xpath=//button[contains(.,'Buy ${TICKER}')]",
132 | "targets": [
133 | ["css=.sc-hmjpVf", "css:finder"],
134 | ["xpath=(//button[@type='button'])[2]", "xpath:attributes"],
135 | ["xpath=//main[@id='mainContent']/div/div[4]/button", "xpath:idRelative"],
136 | ["xpath=//div[4]/button", "xpath:position"],
137 | ["xpath=//button[contains(.,'Buy TRKA')]", "xpath:innerText"]
138 | ],
139 | "value": ""
140 | }, {
141 | "id": "0be328ba-62fb-4aa1-a491-e47dedb5f783",
142 | "comment": "",
143 | "command": "executeScript",
144 | "target": "const helper2 = document.getElementById(\"helper-2\"); if (helper2 && helper2.textContent.trim() === \"Choose your account\") { return true; } const wizardContainer = document.querySelector(\".WizardContainer-esGHbX\"); if (wizardContainer && wizardContainer.querySelector(\"h1\").textContent.includes(\"Review\")) { return true; }",
145 | "targets": [],
146 | "value": "result"
147 | }, {
148 | "id": "5dd5e797-3f53-4770-bca7-6c9a545683e0",
149 | "comment": "",
150 | "command": "while",
151 | "target": "${result} == true",
152 | "targets": [],
153 | "value": ""
154 | }, {
155 | "id": "880ba778-0fdd-4a33-997d-198df963c4f4",
156 | "comment": "",
157 | "command": "echo",
158 | "target": "${account} order has not been placed. Pausing for extra time.",
159 | "targets": [],
160 | "value": ""
161 | }, {
162 | "id": "f45bc24e-268a-4a2c-bede-c2535a5d740e",
163 | "comment": "",
164 | "command": "pause",
165 | "target": "2500",
166 | "targets": [],
167 | "value": ""
168 | }, {
169 | "id": "41616688-a5f4-4d75-97a8-a6d5f9de1765",
170 | "comment": "",
171 | "command": "executeScript",
172 | "target": "const helper2 = document.getElementById(\"helper-2\"); if (helper2 && helper2.textContent.trim() === \"Choose your account\") { return true; } const wizardContainer = document.querySelector(\".WizardContainer-esGHbX\"); if (wizardContainer && wizardContainer.querySelector(\"h1\").textContent.includes(\"Review\")) { return true; }",
173 | "targets": [],
174 | "value": "result"
175 | }, {
176 | "id": "407d2451-b83b-4feb-b5ea-f4d0ddc39f68",
177 | "comment": "",
178 | "command": "end",
179 | "target": "",
180 | "targets": [],
181 | "value": ""
182 | }, {
183 | "id": "886b65cc-c82c-4e20-8325-e26183aafe30",
184 | "comment": "",
185 | "command": "echo",
186 | "target": "${account} Buying/Selling ${TICKER} Helper Session Passed!",
187 | "targets": [],
188 | "value": ""
189 | }, {
190 | "id": "b3e5927c-02b5-42e6-a8eb-e080169a914c",
191 | "comment": "",
192 | "command": "end",
193 | "target": "",
194 | "targets": [],
195 | "value": ""
196 | }]
197 | }],
198 | "suites": [{
199 | "id": "5c03e64a-0f9b-422a-b416-65be8986bacd",
200 | "name": "Default Suite",
201 | "persistSession": false,
202 | "parallel": false,
203 | "timeout": 300,
204 | "tests": []
205 | }],
206 | "urls": ["https://www.sofi.com/wealth/"],
207 | "plugins": []
208 | }
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | # BSD 3-Clause License
2 | #
3 | # Copyright (c) 2023-Present, Prem Patel
4 | #
5 | # Redistribution and use in source and binary forms, with or without
6 | # modification, are permitted provided that the following conditions are met:
7 | #
8 | # 1. Redistributions of source code must retain the above copyright notice, this
9 | # list of conditions and the following disclaimer.
10 | #
11 | # 2. Redistributions in binary form must reproduce the above copyright notice,
12 | # this list of conditions and the following disclaimer in the documentation
13 | # and/or other materials provided with the distribution.
14 | #
15 | # 3. Neither the name of the copyright holder nor the names of its
16 | # contributors may be used to endorse or promote products derived from
17 | # this software without specific prior written permission.
18 | #
19 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 | # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 | # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 |
30 | import os
31 | import json
32 | import sys
33 | import argparse
34 | import shutil
35 | import traceback
36 | import subprocess
37 |
38 | from dotenv import load_dotenv
39 |
40 | load_dotenv()
41 | parser = argparse.ArgumentParser(description="Process stock trading arguments.")
42 | parser.add_argument("tickers", nargs='?', default="JOB", help="Tickers to process")
43 |
44 | args = parser.parse_args()
45 |
46 | def main():
47 | TICKERS = args.tickers.upper()
48 | if "," in TICKERS: print(f"{'-'*100}\nTICKERS passed:\t{TICKERS}\n{'-'*40}")
49 |
50 | file_task_map = {
51 | "CHASE_AI": {"file": os.path.join("src", "Selenium_IDE", "Chase_Auto.side"), "task": ""},
52 | "FIRSTRADE_AI": {"file": os.path.join("src", "Selenium_IDE", "Firstrade_Auto.side"), "task": ""},
53 | "VANGUARD_AI": {"file": os.path.join("src", "Selenium_IDE", "Vanguard_Auto.side"), "task": ""},
54 | "FIDELITY_AI": {"file": os.path.join("src", "Selenium_IDE", "Fidelity_Auto.side"), "task": ""},
55 | "SCHWAB_AI": {"file": os.path.join("src", "Selenium_IDE", "Schwab_Auto.side"), "task": ""},
56 | "SOFI_AI": {"file": os.path.join("src","Selenium_IDE","Sofi Helper.side"), "task": ""},
57 | "ALLY_AI": {"file": os.path.join("src", "Selenium_IDE", "Ally_Auto.side"), "task": ""},
58 | "MERRILL_AI": {"file": os.path.join("src", "Selenium_IDE", "Merrill_Auto.side"), "task": ""},
59 | }
60 | custom_dir = os.environ.get("CUSTOM_DIR", os.path.join(os.path.expanduser('~'), 'Desktop', 'AutoStockTrader'))
61 | os.makedirs(custom_dir, exist_ok=True)
62 |
63 | files = []
64 | logins = []
65 | result = subprocess.run(['git', 'pull'], capture_output=True, text=True)
66 | if 'Your local changes to the following files would be overwritten by merge' in result.stderr:
67 | subprocess.run(['git', 'reset', '--hard'], check=True)
68 | result = subprocess.run(['git', 'pull'], capture_output=False, text=False)
69 | if custom_dir:
70 | dest_path = os.path.join(custom_dir, "Account_Management_Tools.side")
71 | try: shutil.copyfile(os.path.join("src", "Selenium_IDE", "Account_Management_Tools.side"), dest_path)
72 | except shutil.SameFileError: pass
73 | print('-'*105)
74 | for var_name, info in file_task_map.items():
75 | if os.environ.get(var_name):
76 | files.append(info["file"])
77 | print(f"{var_name} is enabled.")
78 |
79 | if var_name == "SCHWAB_AI":
80 | info["task"] = "Array.from({length: " + os.environ[var_name] + "}, (_, i) => i);"
81 | elif var_name == "MERRILL_AI" or var_name == "VANGUARD_AI":
82 | info["task"] = "Array.from({length: " +os.environ[var_name] + "}, (_, i) => i + 1);"
83 | else:
84 | info["task"] = os.environ[var_name].replace(" ", "")
85 |
86 | try:
87 | logins.append(os.environ[var_name.split("_")[0] + "_LOGIN"])
88 | except:
89 | logins.append("LOGIN:HERE")
90 | else:
91 | print(f"{var_name} is disabled. Skipping...")
92 |
93 | print(f'\n{"-"*105}\n')
94 | for filePath in files:
95 | task = ""
96 | for var_name, info in file_task_map.items():
97 | if info["file"].lower() in filePath.lower():
98 | task = info["task"]
99 | break
100 |
101 | # Load the JSON data
102 | with open(filePath, 'r') as file:
103 | data = json.load(file)
104 |
105 | for test in data['tests']:
106 | for command in test['commands']:
107 | # Store Login information, if provided
108 | if command['command'] == 'store' and 'LOGIN' in command['value']:
109 | command['target'] = logins.pop(0)
110 |
111 | # Update Ticker, if provided
112 | if TICKERS is not None and command['value'] == 'TICKER':
113 | command['target'] = f"return '{TICKERS}'" if command['command'] == 'executeScript' else TICKERS
114 | if command['command'] == 'store' and command['value'] == 'dynamic':
115 | command['target'] = os.environ.get("DYNAMIC", 0)
116 | # Update the account number(s) and break to next test
117 | if command['command'] == 'executeScript' and command['value'] == 'accounts':
118 | command['target'] = f"return {task}"
119 | break
120 |
121 | if os.name == 'nt':
122 | filePath = filePath.replace("src\\Selenium_IDE\\", "")
123 | filePath = filePath.replace("src\\X_Archive\\", "")
124 | filePath = f'{custom_dir}/{filePath}' if custom_dir else f'ENV-{filePath}'
125 | elif os.name == 'posix':
126 | filePath = os.path.join("src", "Selenium_IDE", filePath.replace("src/Selenium_IDE/", ""))
127 | filePath = os.path.join("src", "X_Archive", filePath.replace("src/X_Archive/", ""))
128 | filePath = os.path.join(custom_dir, filePath) if custom_dir else f'ENV-{filePath}'
129 |
130 | # Create a new file with the updated data
131 | with open(filePath, 'w') as file:
132 | json.dump(data, file, indent=2)
133 |
134 | print(f"Created/Updated:\t{filePath}!")
135 |
136 | if custom_dir and len(sys.argv) != 2:
137 | os.startfile(custom_dir)
138 |
139 | try:
140 | directory = os.path.dirname(os.path.abspath(__file__))
141 | is_windows = os.name == 'nt'
142 | desktop_path = os.path.join(os.environ['USERPROFILE'], 'Desktop', 'RSA-QuickStart.bat') if is_windows else os.path.join(os.path.expanduser('~'), 'Desktop', 'RSA-QuickStart.sh')
143 | source_path = os.path.join(directory, 'src', 'Helper_Scripts', 'RSA-QuickStart.bat') if is_windows else os.path.join(directory, 'src', 'Helper_Scripts', 'RSA-QuickStart.sh')
144 |
145 | shutil.copyfile(source_path, desktop_path)
146 | print(f"Created/Updated:\t{desktop_path}")
147 |
148 | with open(desktop_path, 'r') as file:
149 | content = file.read()
150 | content = content.replace('set directory=', f'set directory={directory}') if is_windows else content.replace('export DIRECTORY=', f'export DIRECTORY={directory}')
151 | with open(desktop_path, 'w') as file:
152 | file.write(content)
153 | except FileNotFoundError:
154 | print(f'Encountered File Not Found Error: {traceback.format_exc()}\n')
155 | return
156 | except Exception as e:
157 | print(f"An unexpected error occurred: {e}")
158 | traceback.print_exc()
159 | return
160 |
161 |
162 | if __name__ == "__main__":
163 | print(f"""
164 | =========================================================================================================
165 | Script Execution Starting...
166 | ---------------------------------------------------------------------------------------------------------
167 | Free Public Version - Limited Features/Support
168 | (C) Prem-ium
169 | ---------------------------------------------------------------------------------------------------------
170 | Upgrading to Gold Sponsorship unlocks exclusive features, including:
171 | - Faster, reliable Python/Selenium IDE scripts with consolidated brokerage automation.
172 | - Seamless automation with automated limit prices and account retrieval.
173 | - Exclusive setup and customization options via .env and command line arguments.
174 | - Automated cash transfer/withdrawal tools for Fidelity, Chase, and more.
175 | - WellsTrade & Robinhood automation support.
176 |
177 | Join: https://github.com/login?return_to=%2Fsponsors%2FPrem-ium%2Fsponsorships%3Ftier_id%3D308205
178 |
179 | ---------------------------------------------------------------------------------------------------------
180 | Related: Check out my new project, TaxMerge. A powerful app that consolidates multiple 1099-PDF tax forms
181 | into a single CSV file. This tool is designed to simplify the process of tax reporting for stock traders
182 | with multiple brokerage accounts.
183 | Check it out here: https://github.com/Prem-ium/Tax-Merge
184 | ---------------------------------------------------------------------------------------------------------
185 | Thank you for your support!
186 | =========================================================================================================\n\n\n""")
187 | main()
188 |
189 |
190 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
⚙️ Auto Stock Trader 💵
2 |
3 | An awesome repository containing scripts and projects for automating stock orders across multiple brokerages.
4 |
5 | 

6 | 
7 |
8 |
9 |
10 |
11 | ---
12 | ## Features 🚀
13 |
14 | - **Multi-Ticker Support**: Trade multiple stock tickers like `NVDA, TSLA, AAPL` all in one swift test run! 📈
15 | - **Multi-Account Login**: Effortlessly manage and trade across multiple accounts with seamless login automation 🔑
16 | - **Smart Error Handling**: Dynamic error checking & handling with XPATHs ensures your trades run smoothly and without hiccups ⚙️
17 | - **Account Slicing**: Want to focus on specific accounts? Automate starting from a particular account and beyond! 🎯
18 | - **Extended Trading Hours**: Take advantage of extended hours for supported brokerages and never miss out on prime trading opportunities ⏰
19 | - **Limit Order Support**: Set precise limit orders with select brokerages to stay in control of your trades! 📊
20 | - **1-Click Updates**: Update `.side` files with new tickers, account variables, and more in a single click using `.sh` or ' `.bat` script! 🔄
21 | - **JavaScript Helper Scripts**: Boost efficiency with easy-to-use JavaScript helper scripts for managing account arrays 💻
22 |
23 | ---
24 | ## Supported Brokerages 🏦
25 | This project contains the means of automating buy/sell stock orders within:
26 |
27 | - Ally Invest
28 | - Charles Schwab
29 | - Chase's J.P. Morgan Invest
30 | - Fidelity
31 | - Firstrade
32 | - Merrill Edge Lynch
33 | - Sofi Invest
34 | - Vanguard
35 | - Robinhood (Gold Sponsor Only)
36 | - WellsTrade (Gold Sponsor Only)
37 |
38 | ---
39 | ## 🚀 Unlock Premium Features w/ Gold Sponsorship! 🌟
40 | Gold Sponsors gain **exclusive access** to advanced, fully optimized features that streamline and automate brokerage management. Here’s a sneak peek at what you’ll receive with Gold Sponsorship:
41 |
42 | #### 🌟 **Optimized Python & Selenium Scripts**
43 | - **Completely reworked** for maximum efficiency, making them faster and easier to use.
44 | - Unlike public versions, which require more configuration, the Gold version is **seamless** and **user-friendly**.
45 |
46 | #### ⚡ **Up-to-Date & Faster Automation**
47 | - Access the latest brokerage automation updates and improvements.
48 | - Bug fixes, optimizations, and faster execution are guaranteed with the private version, unlike the public version, which may not be updated frequently.
49 |
50 | #### 💰 **Exclusive Tools**
51 | - **Automated Cash Transfer/Withdrawal Tool** to consolidate funds from multiple accounts.
52 | - **Exclusive Robinhood and WellsTrade automation support** available only to Gold Sponsors.
53 | - **Exclusive Features**: Automated limit pricing and account retrieval. Brokerages are dynamically consolidated within a single MASTER file containing all automation test suites. Additional command line arguments, environmental variables, etc., are available for enhanced customization.
54 |
55 | **Ready to upgrade?**
56 |
57 | [Become a Gold Sponsor **here** and unlock these exclusive benefits!](https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false)
58 | [](https://github.com/sponsors/Prem-ium)
59 |
60 |
61 |
62 | ---
63 | ## Environmental Variables 🔧
64 | To use this project, you will need to set the following environment variables in your `.env` file:
65 |
66 | | Variable | Description | Type |
67 | |----------------------|------------------------------------------------------------------------------------------------------------------------|-----------------------------|
68 | | `SCHWAB_AI` | Total number of Schwab accounts | Integer |
69 | | `MERRILL_AI` | Total number of Merrill accounts | Integer |
70 | | `VANGUARD_AI` | Total number of Vanguard accounts | Integer |
71 | | `FIDELITY_AI` | Fidelity account numbers | Nested List of Strings |
72 | | `CHASE_AI` | [List of AI values in Trade URL](https://github.com/Prem-ium/Auto-StockTrader/blob/main/src/README.MD#chase-automatio) | Nested List of Strings |
73 | | `FIRSTRADE_AI` | Firstrade account numbers | List of Strings |
74 | | `ALLY_AI` | Ally account numbers. | List of Strings |
75 | | `CUSTOM_DIR` | Path to the folder to store updated `.side` files | String |
76 | | `DYNAMIC` | Enable dynamic account length feature (0 = Off, 1 = On) | Integer |
77 | | `SOFI_AI` | List of account numbers for Sofi Helper Auto.side | List of Strings |
78 |
79 | As a reminder, if you are a Gold Sponsor, please refer to the private `sponsors` repository README instead of this public version. The sponsor version includes more features and customization options tailored specifically for your needs.
80 | [Need more help?](https://github.com/Prem-ium/Auto-StockTrader/blob/main/src/README.MD)
81 |
82 |
83 | Login Env Example
84 |
85 |
86 | If you prefer, you can store your login information in a `.env` file to automatically open and log in to any brokerage. However, I strongly advise against this practice. Instead, I recommend using the login test to open the login URL and manually log in. Storing credentials in a `.side` file is discouraged due to security reasons. Multiple account credentials are separated by the `:` character.
87 |
88 | Please note that the login test is a best-try approach. Some brokerages, like Chase, may block automated logins, but you can quickly fill out the user/password information manually if you choose to use this tool.
89 |
90 |
91 | | Variable | Description | Type | Example |
92 | |-------------------|-----------------------------------------------|---------|--------------------------------|
93 | | `CHASE_LOGIN` | Chase Account Credentials | String | CHASE_LOGIN="USERNAME:PASSWORD" |
94 | | `FIDELITY_LOGIN` | Fidelity Account Credentials | String | FIDELITY_LOGIN="USERNAME:PASSWORD"|
95 | | `FIRSTADE_LOGIN` | Firstrade Account Credentials | String | FIRSTADE_LOGIN="USERNAME:PASSWORD"|
96 | | `MERRILL_LOGIN` | Merrill Account Credentials | String | MERRILL_LOGIN="USERNAME:PASSWORD"|
97 | | `SCHWAB_LOGIN` | Schwab Account Credentials | String | SCHWAB_LOGIN="USERNAME:PASSWORD" |
98 | | `ALLY_LOGIN` | Ally Account Credentials | String | ALLY_LOGIN="USERNAME:PASSWORD" |
99 | | `VANGUARD_LOGIN` | Vanguard Account Credentials | String | VANGUARD_LOGIN="USERNAME:PASSWORD"|
100 |
101 |
102 | Refer to `.env.example` for more clarity.
103 |
104 | ---
105 | ## Installation ⚙️
106 |
107 | Follow these steps to set up and use Selenium IDE for automation:
108 |
109 | 1. **Install Selenium IDE:**
110 |
111 | **Note:** Selenium IDE is no longer available in browser extension stores. You must manually install it using the `.crx` file included in this project.
112 |
113 | **Steps:**
114 |
115 | 1. Open your browser (Chrome or Chromium-based browsers recommended).
116 | 2. Go to your browser's **Manage Extensions** page.
117 | 3. Enable **Developer Mode**.
118 | 4. Drag the `Selenium-IDE.crx` file from the `src` folder of this project into the browser window.
119 | 5. Confirm the installation when prompted.
120 |
121 | 2. **Clone the Repository & Install Dependencies:**
122 | ```bash
123 | git clone https://github.com/Prem-ium/Auto-StockTrader
124 | cd Auto-StockTrader
125 | pip install -r requirements.txt
126 | ```
127 |
128 | 3. **Configure Environment Variables (.env):**
129 | Create a `.env` file and set up your environment variables following the formats outlined in the [Environmental Variables](https://github.com/Prem-ium/Auto-StockTrader#environmental-variables) section.
130 |
131 | 4. **Run the Python Script:**
132 | ```bash
133 | python main.py
134 | ```
135 |
136 | - Pass a stock ticker as an argument to update all `.side` files:
137 | ```bash
138 | python main.py AAPL
139 | ```
140 |
141 | - Separate multiple tickers with a comma:
142 | ```bash
143 | python main.py NVDA,TSLA,AAPL
144 | ```
145 |
146 | 5. **Open Updated .side Files:**
147 | - Open the updated `.side` project files in Selenium IDE.
148 |
149 | 6. **Execute Desired Automation within Selenium IDE:**
150 | - Log in to your brokerage account.
151 | - Begin running your desired automation tasks in either the buy or sell test tabs.
152 |
153 | ---
154 | ## Donations ❤️
155 |
156 | I've been diligently working on this project for several months, and I'm thrilled with the progress it has made. Based on user testimonials, it has proven to be an invaluable tool for automating stock ticker orders across multiple brokerage accounts and various brokerages. I am continually striving to enhance its functionality and optimize its efficiency for automated order execution.
157 |
158 | If you appreciate my work and would like to show your support, there are two convenient ways to make a donation:
159 |
160 | 1. **GitHub Sponsors**
161 | - [Donate via GitHub Sponsors](https://github.com/sponsors/Prem-ium)
162 | - Preferred because this donation method is fee-free and offers perks for your contribution.
163 | - [](https://github.com/sponsors/Prem-ium)
164 |
165 | 2. **Buy Me A Coffee**
166 | - [Donate via Buy Me A Coffee](https://www.buymeacoffee.com/prem.ium)
167 | - [](https://www.buymeacoffee.com/prem.ium)
168 | 3. **Referral Links**
169 | - If you're unable to make a monetary donation, you can still support my work by using my curated [Referral Links](https://github.com/Prem-ium/Referral-Link-Me/blob/main/README.md). Earn bonuses and rewards while contributing to my projects at the same time.
170 | - [Explore Referral Links](https://github.com/Prem-ium/Referral-Link-Me/blob/main/README.md)
171 |
172 | Your generous donations will go a long way in helping me cover the expenses associated with developing new features and promoting the project to a wider audience. I extend my heartfelt gratitude to all those who have already contributed. Thank you for your support!
173 |
174 | ---
175 | ## Experiencing Issues? 🛠️
176 | I'm not available to respond to issues in this repository. For direct support, please consider sponsoring me below under the `Silver` or `Gold` tier. Keep in mind that the public version is mostly "as built" and is rarely updated, while the private Gold Sponsor version receives regular updates and support.
177 | [](https://github.com/sponsors/Prem-ium)
178 |
179 | ---
180 |
181 | Pull Request Requirements 📋
182 | To ensure a smooth review process, please follow these guidelines when submitting a pull request (PR):
183 |
184 | 1. **Title**: Provide a clear and concise title.
185 | 2. **Description**: Include a detailed description of changes, problems addressed, and any relevant context.
186 | 3. **Documentation**: If necessary, update comments, README, requirements, and any relevant documentation.
187 | 4. **License Compliance**: Ensure any changes made in forks uphold the [repository's license](https://github.com/Prem-ium/Auto-StockTrader/blob/main/LICENSE). Do not make changes to certain areas such as the `FUNDING.yml` or any present copyright information without approval.
188 |
189 | Once you have verified that your changes adhere to these guidelines, please open a pull request with your changes and click 'Request Review' on the Pull Request.
190 |
191 | By adhering to these guidelines, you help maintain the quality and consistency of the project. Thank you for your interest in making contributions!
192 |
193 |
194 | ---
195 | ## License
196 | This repository follows the [BSD 3-Clause “New” or “Revised” License.](https://github.com/Prem-ium/Auto-StockTrader/blob/main/LICENSE)
197 |
198 | ---
199 | End Notes & Extras 🧩
200 |
201 |
202 | ### 🙏 Acknowledgments
203 |
204 | I'd like to sincerly thank my amazing:
205 | - [⭐ Sponsors](https://github.com/sponsors/Prem-ium)
206 | - ☕ [Donors](https://www.buymeacoffee.com/prem.ium)
207 | - 🛠 [Contributors](https://github.com/Prem-ium/Auto-StockTrader/graphs/contributors)
208 |
209 | Your support is invaluable, allowing me to continue creating exciting projects like this. Each one of you plays a crucial role, and I am deeply grateful for your contributions.
210 | If you found this project helpful, please consider:
211 | - Leaving a ⭐
212 | - [Becoming a Sponsor](https://github.com/sponsors/Prem-ium)
213 | - Sharing the project with others
214 |
215 | ---
216 | ### Featured Project(s)
217 |
218 | 📦 TaxMerge
219 |
220 | A powerful tool for merging 1099 tax PDFs from multiple brokerages into one clean CSV.
221 |
222 | **Highlights:**
223 | - 📊 Auto-analysis + visualization of proceeds, gains, interest, and more
224 | - 🧾 Built-in CSV + PDF viewer for accuracy checks
225 | - 💰 Helps avoid $50–$100 document fees
226 | - 🔒 One-time purchase via [GitHub](https://github.com/Prem-ium/Tax-Merge)
227 |
228 | 🎥 Demo Video
229 |
230 |
234 |
235 |
236 |
237 |
238 |
239 | ---
240 |
241 | ### ⚡ Speed Tips (for Selenium IDE users)
242 |
243 | - Adjust `SET_SPEED` for faster test execution
244 | - Use **Reference** instead of **Log** to improve performance
245 | - Turn on **Best Performance** mode in your battery settings
246 | - Keep the automation tab in focus for smoother execution
247 |
248 | ---
249 |
250 |
251 | 🧰 Stream Deck Setup (Optional)
252 |
253 | Here's my custom Stream Deck profile:
254 |
255 |
256 |
257 | | Action | Type | Command |
258 | |-------------------|------------|---------|
259 | | Run | Hotkey | `Ctrl + R` |
260 | | Stop | Hotkey | `Ctrl + .` |
261 | | Pause | Hotkey | `Ctrl + P` |
262 | | QuickStart | Open | `cmd.exe /c "RSA-QuickStart.bat"` |
263 | | Save | Hotkey | `Ctrl + S` |
264 | | Switch Windows | Hotkey | `Alt + Tab` |
265 | | Open Tests | Hotkey | `Ctrl + 1` |
266 | | Open Test Suites | Hotkey | `Ctrl + 2` |
267 | | Start Brave | Powershell | `Start-Process ... brave.exe` |
268 | | Start Edge | Powershell | `start msedge --app=...` |
269 |
270 |
271 |
272 | ---
273 |
274 |
275 | ⚠️ Disclaimer
276 |
277 | - I am **not** a financial advisor, and this project is **not** affiliated with any brokerage.
278 | - Use this tool **at your own risk** — I’m not liable for financial loss, account bans, or other damages.
279 | - This project is provided “as is,” without warranty. By using it, you agree to assume all responsibility.
280 |
281 |
282 |
283 |
--------------------------------------------------------------------------------
/src/Selenium_IDE/Firstrade_Auto.side:
--------------------------------------------------------------------------------
1 | {
2 | "id": "9c9b281d-e9b3-4172-8e46-be01813d4437",
3 | "version": "2.0",
4 | "name": "Firstrade",
5 | "url": "https://invest.firstrade.com",
6 | "tests": [{
7 | "id": "c4367fd5-3ea6-4cac-ae91-509defb9d7c9",
8 | "name": "+ Buy Firstrade",
9 | "commands": [{
10 | "id": "0d6894dd-2d55-4987-9e90-c92de75a3c00",
11 | "comment": "",
12 | "command": "store",
13 | "target": "TICKER_GOES_HERE",
14 | "targets": [],
15 | "value": "TICKER"
16 | }, {
17 | "id": "30dfd5f1-3abb-4b9c-bd14-9e537847415a",
18 | "comment": "",
19 | "command": "store",
20 | "target": "1",
21 | "targets": [],
22 | "value": "QUANTITY"
23 | }, {
24 | "id": "0c21e4cd-cee0-4c9a-902d-711bd51ff73f",
25 | "comment": "",
26 | "command": "store",
27 | "target": "enterlastsuccessfulaccounthere",
28 | "targets": [],
29 | "value": "target"
30 | }, {
31 | "id": "a9efebcd-6b04-46fe-8622-0ecb5642d9bd",
32 | "comment": "",
33 | "command": "executeScript",
34 | "target": "return ${TICKER}.split(\",\");",
35 | "targets": [],
36 | "value": "TICKERS"
37 | }, {
38 | "id": "e3d9e076-85a1-429e-9c89-977c05592d26",
39 | "comment": "",
40 | "command": "executeScript",
41 | "target": "return ['YOUR','ACCOUNTS','HERE'];",
42 | "targets": [],
43 | "value": "accounts"
44 | }, {
45 | "id": "0158ffb3-1dcf-4c14-8727-77ae21435138",
46 | "comment": "",
47 | "command": "open",
48 | "target": "https://invest.firstrade.com/cgi-bin/main#/cgi-bin/stock_order",
49 | "targets": [],
50 | "value": ""
51 | }, {
52 | "id": "8c9dc35a-76b8-4428-a554-848f848b2b0d",
53 | "comment": "",
54 | "command": "executeScript",
55 | "target": "return ${accounts}.slice(${accounts}.indexOf(${target}.trim()) + 1);",
56 | "targets": [],
57 | "value": "list"
58 | }, {
59 | "id": "dfeb4796-7aa7-48ff-ab6f-8328acc32aaa",
60 | "comment": "",
61 | "command": "store",
62 | "target": "",
63 | "targets": [],
64 | "value": "LIMIT_PRICE"
65 | }, {
66 | "id": "26c7e8ca-3189-43e2-8746-9112dfd983dc",
67 | "comment": "",
68 | "command": "forEach",
69 | "target": "list",
70 | "targets": [],
71 | "value": "account"
72 | }, {
73 | "id": "9192133d-cc72-47d1-9f2c-50c7aace0192",
74 | "comment": "",
75 | "command": "click",
76 | "target": "id=accountId1",
77 | "targets": [
78 | ["id=accountId1", "id"],
79 | ["name=accountId", "name"],
80 | ["css=#accountId1", "css:finder"],
81 | ["xpath=//select[@id='accountId1']", "xpath:attributes"],
82 | ["xpath=//div[@id='stockorder_content']/div[2]/div/div/select", "xpath:idRelative"],
83 | ["xpath=//div/div/select", "xpath:position"]
84 | ],
85 | "value": ""
86 | }, {
87 | "id": "38e8ff8d-1e26-4025-90fe-0b1ca9011ef1",
88 | "comment": "",
89 | "command": "select",
90 | "target": "id=accountId1",
91 | "targets": [],
92 | "value": "label=${account}"
93 | }, {
94 | "id": "3ae8e293-1951-4fd4-b8a4-cf544b316a66",
95 | "comment": "",
96 | "command": "forEach",
97 | "target": "TICKERS",
98 | "targets": [],
99 | "value": "TICK"
100 | }, {
101 | "id": "43fefee1-9afb-4306-8432-151c9ec959b0",
102 | "comment": "",
103 | "command": "pause",
104 | "target": "750",
105 | "targets": [],
106 | "value": ""
107 | }, {
108 | "id": "c1b7a7a9-ee0d-42b8-98fe-c2c48eff864e",
109 | "comment": "",
110 | "command": "click",
111 | "target": "id=transactionType_Buy1",
112 | "targets": [
113 | ["id=transactionType_Buy1", "id"],
114 | ["name=transactionType", "name"],
115 | ["css=#transactionType_Buy1", "css:finder"],
116 | ["xpath=//input[@id='transactionType_Buy1']", "xpath:attributes"],
117 | ["xpath=//div[@id='colorbox']/div/div/ul/li[2]/input", "xpath:idRelative"],
118 | ["xpath=//li[2]/input", "xpath:position"]
119 | ],
120 | "value": ""
121 | }, {
122 | "id": "743ae9b3-ecff-4d08-8e7d-810ddbd6ed6f",
123 | "comment": "",
124 | "command": "click",
125 | "target": "id=quantity1",
126 | "targets": [
127 | ["id=quantity1", "id"],
128 | ["name=quantity", "name"],
129 | ["css=#quantity1", "css:finder"],
130 | ["xpath=//input[@id='quantity1']", "xpath:attributes"],
131 | ["xpath=//div[@id='colorbox']/div/div/ul[2]/li[2]/input", "xpath:idRelative"],
132 | ["xpath=//ul[2]/li[2]/input", "xpath:position"]
133 | ],
134 | "value": ""
135 | }, {
136 | "id": "89422d3b-44ab-4be0-a910-f5baa2bdaaf9",
137 | "comment": "",
138 | "command": "type",
139 | "target": "id=quantity1",
140 | "targets": [
141 | ["id=quantity1", "id"],
142 | ["name=quantity", "name"],
143 | ["css=#quantity1", "css:finder"],
144 | ["xpath=//input[@id='quantity1']", "xpath:attributes"],
145 | ["xpath=//div[@id='colorbox']/div/div/ul[2]/li[2]/input", "xpath:idRelative"],
146 | ["xpath=//ul[2]/li[2]/input", "xpath:position"]
147 | ],
148 | "value": "${QUANTITY}"
149 | }, {
150 | "id": "bd07a705-7268-4cc1-a629-926010789596",
151 | "comment": "",
152 | "command": "click",
153 | "target": "id=symbol1",
154 | "targets": [
155 | ["id=symbol1", "id"],
156 | ["name=symbol", "name"],
157 | ["css=#symbol1", "css:finder"],
158 | ["xpath=//input[@id='symbol1']", "xpath:attributes"],
159 | ["xpath=//div[@id='colorbox']/div/div/ul[3]/li[2]/input", "xpath:idRelative"],
160 | ["xpath=//ul[3]/li[2]/input", "xpath:position"]
161 | ],
162 | "value": ""
163 | }, {
164 | "id": "9d552320-c8b8-44a4-ac83-29dc3da16388",
165 | "comment": "",
166 | "command": "sendKeys",
167 | "target": "id=symbol1",
168 | "targets": [],
169 | "value": "${TICK}"
170 | }, {
171 | "id": "11e94034-27a2-4279-89f4-6380a0353ab8",
172 | "comment": "",
173 | "command": "click",
174 | "target": "id=limitPrice1",
175 | "targets": [
176 | ["id=limitPrice1", "id"],
177 | ["name=limitPrice", "name"],
178 | ["css=#limitPrice1", "css:finder"],
179 | ["xpath=//input[@id='limitPrice1']", "xpath:attributes"],
180 | ["xpath=//div[@id='colorbox']/div/div/ul[5]/li[2]/input", "xpath:idRelative"],
181 | ["xpath=//ul[5]/li[2]/input", "xpath:position"]
182 | ],
183 | "value": ""
184 | }, {
185 | "id": "8108172d-0f5e-4215-a5c7-51edeb185522",
186 | "comment": "",
187 | "command": "sendKeys",
188 | "target": "id=limitPrice1",
189 | "targets": [],
190 | "value": "${LIMIT_PRICE}"
191 | }, {
192 | "id": "703bd4c0-976e-4bcc-98d7-cec5a044fcf4",
193 | "comment": "",
194 | "command": "click",
195 | "target": "id=submitOrder1",
196 | "targets": [
197 | ["id=submitOrder1", "id"],
198 | ["name=submitOrder", "name"],
199 | ["css=#submitOrder1", "css:finder"],
200 | ["xpath=//a[contains(text(),'Send Order')]", "xpath:link"],
201 | ["xpath=//a[@id='submitOrder1']", "xpath:attributes"],
202 | ["xpath=//div[@id='stockorder_content']/div[2]/div[6]/span/a[3]", "xpath:idRelative"],
203 | ["xpath=(//a[contains(@href, 'javascript:void(0);')])[18]", "xpath:href"],
204 | ["xpath=//span/a[3]", "xpath:position"]
205 | ],
206 | "value": ""
207 | }, {
208 | "id": "5a4f50cf-ae25-43d8-aeb9-722707b250b0",
209 | "comment": "",
210 | "command": "click",
211 | "target": "css=.submitted_placeorder_bnt",
212 | "targets": [
213 | ["css=.submitted_placeorder_bnt", "css:finder"],
214 | ["xpath=//a[contains(text(),'Place Another Order')]", "xpath:link"],
215 | ["xpath=//div[@id='stockorder_content']/div[2]/div[8]/span/a", "xpath:idRelative"],
216 | ["xpath=//a[contains(@href, \"javascript:headerChange('/cgi-bin/stock_order');\")]", "xpath:href"],
217 | ["xpath=//div[8]/span/a", "xpath:position"]
218 | ],
219 | "value": ""
220 | }, {
221 | "id": "132d2592-946f-4f09-9827-c4060f381ccc",
222 | "comment": "",
223 | "command": "mouseOver",
224 | "target": "id=acctlink_pos",
225 | "targets": [
226 | ["id=acctlink_pos", "id"],
227 | ["css=#acctlink_pos", "css:finder"],
228 | ["xpath=//a[@id='acctlink_pos']", "xpath:attributes"],
229 | ["xpath=//div[@id='maincontent']/div[2]/div[3]/div/div/ul/li[2]/a", "xpath:idRelative"],
230 | ["xpath=(//a[contains(@href, 'javascript:void(0)')])[36]", "xpath:href"],
231 | ["xpath=//div[3]/div/div/ul/li[2]/a", "xpath:position"]
232 | ],
233 | "value": ""
234 | }, {
235 | "id": "f935c532-19df-4c6d-b272-80aa592cd716",
236 | "comment": "",
237 | "command": "echo",
238 | "target": "${account} bought ${TICK}",
239 | "targets": [],
240 | "value": ""
241 | }, {
242 | "id": "e820fde7-5e7a-4a5b-91e5-161a47ca455a",
243 | "comment": "",
244 | "command": "end",
245 | "target": "",
246 | "targets": [],
247 | "value": ""
248 | }, {
249 | "id": "0c3eb518-1ec7-444e-8010-f53358b39d55",
250 | "comment": "",
251 | "command": "end",
252 | "target": "",
253 | "targets": [],
254 | "value": ""
255 | }, {
256 | "id": "1e254390-4b2e-4445-a86c-5a5ade17d9b5",
257 | "comment": "",
258 | "command": "open",
259 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
260 | "targets": [],
261 | "value": ""
262 | }, {
263 | "id": "216bea27-f7ca-49fe-be4e-ef6d83369e73",
264 | "comment": "",
265 | "command": "echo",
266 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
267 | "targets": [],
268 | "value": ""
269 | }]
270 | }, {
271 | "id": "79f621d4-a532-4e4a-bb70-680c3f88d074",
272 | "name": "- Sell Firstrade",
273 | "commands": [{
274 | "id": "79813301-6cc4-48d2-9e86-2a68ce307317",
275 | "comment": "",
276 | "command": "store",
277 | "target": "TICKER_GOES_HERE",
278 | "targets": [],
279 | "value": "TICKER"
280 | }, {
281 | "id": "8f52ba48-9f1e-4129-bfd5-e5f8ca8e8402",
282 | "comment": "",
283 | "command": "store",
284 | "target": "1",
285 | "targets": [],
286 | "value": "QUANTITY"
287 | }, {
288 | "id": "3a7f8864-c6ce-41a0-bc24-2367f38b18eb",
289 | "comment": "",
290 | "command": "store",
291 | "target": "enterlastsuccessfulaccounthere",
292 | "targets": [],
293 | "value": "target"
294 | }, {
295 | "id": "c962cffb-a5b7-4ed7-be34-866dd0101d3c",
296 | "comment": "",
297 | "command": "executeScript",
298 | "target": "return ${TICKER}.split(\",\");",
299 | "targets": [],
300 | "value": "TICKERS"
301 | }, {
302 | "id": "fb05d9fc-0aa5-402d-b194-965639ebbf4d",
303 | "comment": "",
304 | "command": "executeScript",
305 | "target": "return ['YOUR','ACCOUNTS','HERE'];",
306 | "targets": [],
307 | "value": "accounts"
308 | }, {
309 | "id": "ef7683ac-2b3d-4c60-986c-0f9d96209cd7",
310 | "comment": "",
311 | "command": "open",
312 | "target": "https://invest.firstrade.com/cgi-bin/main#/cgi-bin/stock_order",
313 | "targets": [],
314 | "value": ""
315 | }, {
316 | "id": "3c57aa74-6990-4332-bb2c-fe40c6c9ecbb",
317 | "comment": "",
318 | "command": "executeScript",
319 | "target": "return ${accounts}.slice(${accounts}.indexOf(${target}.trim()) + 1);",
320 | "targets": [],
321 | "value": "list"
322 | }, {
323 | "id": "8d8dfa67-b38b-4e55-b738-a243b01786a4",
324 | "comment": "",
325 | "command": "store",
326 | "target": "",
327 | "targets": [],
328 | "value": "LIMIT_PRICE"
329 | }, {
330 | "id": "27db9827-d53a-4aeb-9bcc-05baa93646f5",
331 | "comment": "",
332 | "command": "forEach",
333 | "target": "list",
334 | "targets": [],
335 | "value": "account"
336 | }, {
337 | "id": "a5157059-1c70-4cb1-afe6-06221777f529",
338 | "comment": "",
339 | "command": "click",
340 | "target": "id=accountId1",
341 | "targets": [
342 | ["id=accountId1", "id"],
343 | ["name=accountId", "name"],
344 | ["css=#accountId1", "css:finder"],
345 | ["xpath=//select[@id='accountId1']", "xpath:attributes"],
346 | ["xpath=//div[@id='stockorder_content']/div[2]/div/div/select", "xpath:idRelative"],
347 | ["xpath=//div/div/select", "xpath:position"]
348 | ],
349 | "value": ""
350 | }, {
351 | "id": "6114101b-8cce-4a7d-9a96-0dbc3d2d880e",
352 | "comment": "",
353 | "command": "select",
354 | "target": "id=accountId1",
355 | "targets": [],
356 | "value": "label=${account}"
357 | }, {
358 | "id": "47340326-7154-4297-9d3b-2f7982995398",
359 | "comment": "",
360 | "command": "forEach",
361 | "target": "TICKERS",
362 | "targets": [],
363 | "value": "TICK"
364 | }, {
365 | "id": "82772a8c-cdcb-429e-b31a-6c51bebe3a8b",
366 | "comment": "",
367 | "command": "pause",
368 | "target": "750",
369 | "targets": [],
370 | "value": ""
371 | }, {
372 | "id": "fc79f397-eb52-4b86-800c-1dd3ab78e5b2",
373 | "comment": "",
374 | "command": "click",
375 | "target": "id=transactionType_Sell1",
376 | "targets": [
377 | ["id=transactionType_Sell1", "id"],
378 | ["css=#transactionType_Sell1", "css:finder"],
379 | ["xpath=//input[@id='transactionType_Sell1']", "xpath:attributes"],
380 | ["xpath=//div[@id='colorbox']/div/div/ul/li[3]/input", "xpath:idRelative"],
381 | ["xpath=//li[3]/input", "xpath:position"]
382 | ],
383 | "value": ""
384 | }, {
385 | "id": "4aa9980f-e7f4-4982-aade-8918d0f3f0df",
386 | "comment": "",
387 | "command": "click",
388 | "target": "id=quantity1",
389 | "targets": [
390 | ["id=quantity1", "id"],
391 | ["name=quantity", "name"],
392 | ["css=#quantity1", "css:finder"],
393 | ["xpath=//input[@id='quantity1']", "xpath:attributes"],
394 | ["xpath=//div[@id='colorbox']/div/div/ul[2]/li[2]/input", "xpath:idRelative"],
395 | ["xpath=//ul[2]/li[2]/input", "xpath:position"]
396 | ],
397 | "value": ""
398 | }, {
399 | "id": "6bb0c3d7-5028-40f1-bb77-1b4787e4eea8",
400 | "comment": "",
401 | "command": "type",
402 | "target": "id=quantity1",
403 | "targets": [
404 | ["id=quantity1", "id"],
405 | ["name=quantity", "name"],
406 | ["css=#quantity1", "css:finder"],
407 | ["xpath=//input[@id='quantity1']", "xpath:attributes"],
408 | ["xpath=//div[@id='colorbox']/div/div/ul[2]/li[2]/input", "xpath:idRelative"],
409 | ["xpath=//ul[2]/li[2]/input", "xpath:position"]
410 | ],
411 | "value": "${QUANTITY}"
412 | }, {
413 | "id": "1593ca70-cbeb-4702-9fae-bb680f82c944",
414 | "comment": "",
415 | "command": "click",
416 | "target": "id=symbol1",
417 | "targets": [
418 | ["id=symbol1", "id"],
419 | ["name=symbol", "name"],
420 | ["css=#symbol1", "css:finder"],
421 | ["xpath=//input[@id='symbol1']", "xpath:attributes"],
422 | ["xpath=//div[@id='colorbox']/div/div/ul[3]/li[2]/input", "xpath:idRelative"],
423 | ["xpath=//ul[3]/li[2]/input", "xpath:position"]
424 | ],
425 | "value": ""
426 | }, {
427 | "id": "e6b32b42-fcc3-416c-a72d-17cc91213917",
428 | "comment": "",
429 | "command": "sendKeys",
430 | "target": "id=symbol1",
431 | "targets": [],
432 | "value": "${TICK}"
433 | }, {
434 | "id": "48240df5-1a51-4c57-bba1-c05034762ad4",
435 | "comment": "",
436 | "command": "click",
437 | "target": "id=priceType1",
438 | "targets": [
439 | ["id=priceType1", "id"],
440 | ["name=priceType", "name"],
441 | ["css=#priceType1", "css:finder"],
442 | ["xpath=//select[@id='priceType1']", "xpath:attributes"],
443 | ["xpath=//div[@id='colorbox']/div/div/ul[4]/li[2]/select", "xpath:idRelative"],
444 | ["xpath=//li[2]/select", "xpath:position"]
445 | ],
446 | "value": ""
447 | }, {
448 | "id": "6148f171-bcd7-4d28-aeaa-31dfe0acce62",
449 | "comment": "",
450 | "command": "select",
451 | "target": "id=priceType1",
452 | "targets": [],
453 | "value": "label=Market"
454 | }, {
455 | "id": "a85e7308-a330-4659-aff2-710f6a6da999",
456 | "comment": "",
457 | "command": "click",
458 | "target": "id=submitOrder1",
459 | "targets": [
460 | ["id=submitOrder1", "id"],
461 | ["name=submitOrder", "name"],
462 | ["css=#submitOrder1", "css:finder"],
463 | ["xpath=//a[contains(text(),'Send Order')]", "xpath:link"],
464 | ["xpath=//a[@id='submitOrder1']", "xpath:attributes"],
465 | ["xpath=//div[@id='stockorder_content']/div[2]/div[6]/span/a[3]", "xpath:idRelative"],
466 | ["xpath=(//a[contains(@href, 'javascript:void(0);')])[18]", "xpath:href"],
467 | ["xpath=//span/a[3]", "xpath:position"]
468 | ],
469 | "value": ""
470 | }, {
471 | "id": "6dc565f0-de36-4d76-975e-f94cd0a989c9",
472 | "comment": "",
473 | "command": "click",
474 | "target": "css=.submitted_placeorder_bnt",
475 | "targets": [
476 | ["css=.submitted_placeorder_bnt", "css:finder"],
477 | ["xpath=//a[contains(text(),'Place Another Order')]", "xpath:link"],
478 | ["xpath=//div[@id='stockorder_content']/div[2]/div[8]/span/a", "xpath:idRelative"],
479 | ["xpath=//a[contains(@href, \"javascript:headerChange('/cgi-bin/stock_order');\")]", "xpath:href"],
480 | ["xpath=//div[8]/span/a", "xpath:position"]
481 | ],
482 | "value": ""
483 | }, {
484 | "id": "03e659e9-ac44-482e-a104-53453a17cfd4",
485 | "comment": "",
486 | "command": "mouseOver",
487 | "target": "id=acctlink_pos",
488 | "targets": [
489 | ["id=acctlink_pos", "id"],
490 | ["css=#acctlink_pos", "css:finder"],
491 | ["xpath=//a[@id='acctlink_pos']", "xpath:attributes"],
492 | ["xpath=//div[@id='maincontent']/div[2]/div[3]/div/div/ul/li[2]/a", "xpath:idRelative"],
493 | ["xpath=(//a[contains(@href, 'javascript:void(0)')])[36]", "xpath:href"],
494 | ["xpath=//div[3]/div/div/ul/li[2]/a", "xpath:position"]
495 | ],
496 | "value": ""
497 | }, {
498 | "id": "6e05b1af-2bba-4e80-803a-d798b472ed64",
499 | "comment": "",
500 | "command": "echo",
501 | "target": "${account} sold ${TICK}",
502 | "targets": [],
503 | "value": ""
504 | }, {
505 | "id": "0a58485e-a776-4058-845f-301a054b9e11",
506 | "comment": "",
507 | "command": "end",
508 | "target": "",
509 | "targets": [],
510 | "value": ""
511 | }, {
512 | "id": "ce6c5a73-42ed-47d6-a6ee-80477080972e",
513 | "comment": "",
514 | "command": "end",
515 | "target": "",
516 | "targets": [],
517 | "value": ""
518 | }, {
519 | "id": "6ea07250-8df6-45ab-a86f-eb489a5760c6",
520 | "comment": "",
521 | "command": "open",
522 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
523 | "targets": [],
524 | "value": ""
525 | }, {
526 | "id": "3cfd994f-eed2-4c9c-831a-e6e84b67df73",
527 | "comment": "",
528 | "command": "echo",
529 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
530 | "targets": [],
531 | "value": ""
532 | }]
533 | }, {
534 | "id": "24b2fe7d-03f7-4b18-b846-77fae0f90f87",
535 | "name": "| Firstrade Login",
536 | "commands": [{
537 | "id": "550a267d-aa4e-423f-b611-90458a1759ac",
538 | "comment": "",
539 | "command": "open",
540 | "target": "https://invest.firstrade.com/cgi-bin/login",
541 | "targets": [],
542 | "value": ""
543 | }, {
544 | "id": "3835fe1f-7ddc-473b-a3a4-55361aa6f6f3",
545 | "comment": "",
546 | "command": "store",
547 | "target": "LOGIN:HERE",
548 | "targets": [],
549 | "value": "FIRSTRADE_LOGIN"
550 | }, {
551 | "id": "6db7699f-73a5-47c0-8192-466dfa2f796f",
552 | "comment": "",
553 | "command": "if",
554 | "target": "${FIRSTRADE_LOGIN} != \"LOGIN:HERE\"",
555 | "targets": [],
556 | "value": ""
557 | }, {
558 | "id": "360f7e65-2aba-4ad8-9736-ad54f21795e8",
559 | "comment": "",
560 | "command": "executeScript",
561 | "target": "return ${FIRSTRADE_LOGIN}.split(\":\");",
562 | "targets": [],
563 | "value": "LOGIN"
564 | }, {
565 | "id": "acc7743d-174c-48a7-aa06-f12decd6ef30",
566 | "comment": "",
567 | "command": "echo",
568 | "target": "It is not reccomended to use this method to automate a login. Proceed at your own risk.",
569 | "targets": [],
570 | "value": ""
571 | }, {
572 | "id": "90786ca9-c88b-4cda-aa8d-3f03163fe619",
573 | "comment": "",
574 | "command": "click",
575 | "target": "id=username",
576 | "targets": [
577 | ["id=username", "id"],
578 | ["name=username", "name"],
579 | ["css=#username", "css:finder"],
580 | ["xpath=//input[@id='username']", "xpath:attributes"],
581 | ["xpath=//form[@id='loginForm']/div[3]/input", "xpath:idRelative"],
582 | ["xpath=//div[3]/input", "xpath:position"]
583 | ],
584 | "value": ""
585 | }, {
586 | "id": "ea050150-059c-4dbb-96b5-b2dad6f61ca6",
587 | "comment": "",
588 | "command": "type",
589 | "target": "id=username",
590 | "targets": [
591 | ["id=username", "id"],
592 | ["name=username", "name"],
593 | ["css=#username", "css:finder"],
594 | ["xpath=//input[@id='username']", "xpath:attributes"],
595 | ["xpath=//form[@id='loginForm']/div[3]/input", "xpath:idRelative"],
596 | ["xpath=//div[3]/input", "xpath:position"]
597 | ],
598 | "value": "${LOGIN[0]}"
599 | }, {
600 | "id": "3b3eb9f5-f00d-42f3-a636-7980060a9ca3",
601 | "comment": "",
602 | "command": "click",
603 | "target": "id=password",
604 | "targets": [
605 | ["id=password", "id"],
606 | ["name=password", "name"],
607 | ["css=#password", "css:finder"],
608 | ["xpath=//input[@id='password']", "xpath:attributes"],
609 | ["xpath=//form[@id='loginForm']/div[4]/input", "xpath:idRelative"],
610 | ["xpath=//div[4]/input", "xpath:position"]
611 | ],
612 | "value": ""
613 | }, {
614 | "id": "1842a5a3-8d1b-4439-b33e-cc1e253ae3c7",
615 | "comment": "",
616 | "command": "type",
617 | "target": "id=password",
618 | "targets": [
619 | ["id=password", "id"],
620 | ["name=password", "name"],
621 | ["css=#password", "css:finder"],
622 | ["xpath=//input[@id='password']", "xpath:attributes"],
623 | ["xpath=//form[@id='loginForm']/div[4]/input", "xpath:idRelative"],
624 | ["xpath=//div[4]/input", "xpath:position"]
625 | ],
626 | "value": "${LOGIN[1]}"
627 | }, {
628 | "id": "c7d0648e-6400-4489-b02f-b2f5d145672e",
629 | "comment": "",
630 | "command": "click",
631 | "target": "id=loginButton",
632 | "targets": [
633 | ["id=loginButton", "id"],
634 | ["css=#loginButton", "css:finder"],
635 | ["xpath=//input[@id='loginButton']", "xpath:attributes"],
636 | ["xpath=//form[@id='loginForm']/input[4]", "xpath:idRelative"],
637 | ["xpath=//input[4]", "xpath:position"]
638 | ],
639 | "value": ""
640 | }, {
641 | "id": "c3657f82-8f80-4a86-84a9-947474233276",
642 | "comment": "",
643 | "command": "end",
644 | "target": "",
645 | "targets": [],
646 | "value": ""
647 | }]
648 | }],
649 | "suites": [{
650 | "id": "34398528-d8e1-448a-9801-cbe828f27800",
651 | "name": "Default Suite",
652 | "persistSession": false,
653 | "parallel": false,
654 | "timeout": 300,
655 | "tests": ["c4367fd5-3ea6-4cac-ae91-509defb9d7c9"]
656 | }],
657 | "urls": ["https://invest.firstrade.com/"],
658 | "plugins": []
659 | }
--------------------------------------------------------------------------------
/src/Selenium_IDE/Account_Management_Tools.side:
--------------------------------------------------------------------------------
1 | {
2 | "id": "e4e597d0-462c-413c-9297-475a4a3036c2",
3 | "version": "2.0",
4 | "name": "Account Manager",
5 | "url": "http://localhost/",
6 | "tests": [{
7 | "id": "aa447fb9-1700-464c-91b8-fabcc941ee91",
8 | "name": "[ Fidelity Account Rename ]",
9 | "commands": [{
10 | "id": "f1fd36d6-f939-41ce-8413-69d7ec38d9de",
11 | "comment": "",
12 | "command": "open",
13 | "target": "https://digital.fidelity.com/ftgw/digital/portfolio/summary",
14 | "targets": [],
15 | "value": ""
16 | }, {
17 | "id": "c4cdc97f-d86a-4f2b-b5f3-fdfd4f66188c",
18 | "comment": "",
19 | "command": "executeScript",
20 | "target": "return Array.from({length: 10}, (_, i) => i + 1);",
21 | "targets": [],
22 | "value": "accounts"
23 | }, {
24 | "id": "11bf21ca-731b-4cf5-8ee4-eedce21d8421",
25 | "comment": "",
26 | "command": "click",
27 | "target": "css=.customize-text s-fallback-wrapper",
28 | "targets": [
29 | ["css=.customize-text s-fallback-wrapper", "css:finder"],
30 | ["xpath=//a/span/s-slot/s-fallback-wrapper", "xpath:position"],
31 | ["xpath=//s-fallback-wrapper[contains(.,'Customize')]", "xpath:innerText"]
32 | ],
33 | "value": ""
34 | }, {
35 | "id": "f3762eed-e33f-4666-957d-44c9a6af991f",
36 | "comment": "",
37 | "command": "forEach",
38 | "target": "accounts",
39 | "targets": [],
40 | "value": "numb"
41 | }, {
42 | "id": "dd7da370-4611-4e70-9bf5-8fd4433971a0",
43 | "comment": "",
44 | "command": "pause",
45 | "target": "1000",
46 | "targets": [],
47 | "value": ""
48 | }, {
49 | "id": "c21c6f5d-76d0-4619-8e91-d91eb12e09b4",
50 | "comment": "",
51 | "command": "click",
52 | "target": "css=.custom-modal__accounts-item:nth-child(${numb}) .pvd-checkbox__label",
53 | "targets": [
54 | ["css=.custom-modal__accounts-item:nth-child(2) .pvd-checkbox__label", "css:finder"],
55 | ["xpath=//div[@id='pvd-tab-panel-id-589795610982']/s-slot/s-assigned-wrapper/div/div[2]/div/div/div/div[2]/div/div/pvd3-checkbox/s-root/div/label", "xpath:idRelative"],
56 | ["xpath=//div[2]/div/div/pvd3-checkbox/s-root/div/label", "xpath:position"]
57 | ],
58 | "value": ""
59 | }, {
60 | "id": "e0df0a67-9336-4cc1-8a59-ae4b1386d778",
61 | "comment": "",
62 | "command": "click",
63 | "target": "css=.account-actions-el:nth-child(2) .pvd-button__text s-assigned-wrapper",
64 | "targets": [
65 | ["css=.account-actions-el:nth-child(2) .pvd-button__text s-assigned-wrapper", "css:finder"],
66 | ["xpath=//div[@id='pvd-tab-panel-id-14083821632']/s-slot/s-assigned-wrapper/div/div/div[2]/pvd3-button/s-root/button/div/span/s-slot/s-assigned-wrapper", "xpath:idRelative"],
67 | ["xpath=//div[2]/pvd3-button/s-root/button/div/span/s-slot/s-assigned-wrapper", "xpath:position"]
68 | ],
69 | "value": ""
70 | }, {
71 | "id": "62e1badb-78db-4f71-a337-ebc1d70863de",
72 | "comment": "",
73 | "command": "click",
74 | "target": "css=.account-name-input-field .pvd-input__input",
75 | "targets": [
76 | ["css=.account-name-input-field .pvd-input__input", "css:finder"],
77 | ["xpath=(//input[@type='text'])[4]", "xpath:attributes"],
78 | ["xpath=//div[@id='pvd-tab-panel-id-14083821632']/s-slot/s-assigned-wrapper/div/div[2]/div/div/div/div/div/div/pvd3-input/s-root/div/input", "xpath:idRelative"],
79 | ["xpath=//div/div/div/pvd3-input/s-root/div/input", "xpath:position"]
80 | ],
81 | "value": ""
82 | }, {
83 | "id": "4520c904-66f0-4c42-9546-0d2470b7692b",
84 | "comment": "",
85 | "command": "type",
86 | "target": "css=.account-name-input-field .pvd-input__input",
87 | "targets": [
88 | ["css=.account-name-input-field .pvd-input__input", "css:finder"],
89 | ["xpath=(//input[@type='text'])[4]", "xpath:attributes"],
90 | ["xpath=//div[@id='pvd-tab-panel-id-14083821632']/s-slot/s-assigned-wrapper/div/div[2]/div/div/div/div/div/div/pvd3-input/s-root/div/input", "xpath:idRelative"],
91 | ["xpath=//div/div/div/pvd3-input/s-root/div/input", "xpath:position"]
92 | ],
93 | "value": "Individual ${numb}"
94 | }, {
95 | "id": "cbf70c7f-8bab-4eaf-8918-a78664576bac",
96 | "comment": "",
97 | "command": "echo",
98 | "target": "${numb} Account Name Updated",
99 | "targets": [],
100 | "value": ""
101 | }, {
102 | "id": "f1947c14-8edd-4003-9489-c6ad9f96ac76",
103 | "comment": "",
104 | "command": "end",
105 | "target": "",
106 | "targets": [],
107 | "value": ""
108 | }, {
109 | "id": "6e20537e-2124-44c8-a448-1ac6eaccfedb",
110 | "comment": "",
111 | "command": "click",
112 | "target": "css=.custom-modal__btn-actions:nth-child(3) .custom-modal__btn-actions--save .pvd-button__text s-assigned-wrapper",
113 | "targets": [
114 | ["css=.custom-modal__btn-actions:nth-child(3) .custom-modal__btn-actions--save .pvd-button__text s-assigned-wrapper", "css:finder"],
115 | ["xpath=//div[@id='pvd-tab-panel-id-730480405543']/s-slot/s-assigned-wrapper/div/div[3]/div[2]/helios-button[2]/s-root/button/div/span/s-slot/s-assigned-wrapper", "xpath:idRelative"],
116 | ["xpath=//helios-button[2]/s-root/button/div/span/s-slot/s-assigned-wrapper", "xpath:position"]
117 | ],
118 | "value": ""
119 | }]
120 | }, {
121 | "id": "208cfed9-1e03-448d-91ad-1364fa16bc02",
122 | "name": "[ Merrill Edge Account Rename ]",
123 | "commands": [{
124 | "id": "a46221a1-3a6a-4d76-8157-13d8d0d8657d",
125 | "comment": "",
126 | "command": "echo",
127 | "target": "Edge Account Rename Tool has been provided for the public. Fidelity is available for Gold Sponsors. ",
128 | "targets": [],
129 | "value": ""
130 | }, {
131 | "id": "41d2411a-5cd0-4313-a93f-4e12b3be05ff",
132 | "comment": "",
133 | "command": "echo",
134 | "target": "The following has been provided \"as is\", no updates/improvements will be added for this public version. ",
135 | "targets": [],
136 | "value": ""
137 | }, {
138 | "id": "a9a9d601-8f6d-48bc-903b-df9ab9f869ba",
139 | "comment": "",
140 | "command": "open",
141 | "target": "https://olui2.fs.ml.com/CSProfileSettings/DisplayOptions.aspx",
142 | "targets": [],
143 | "value": ""
144 | }, {
145 | "id": "e55a3a34-13bd-4172-9b77-9d3ab9c2ebe8",
146 | "comment": "Change '15' to the number of your accounts",
147 | "command": "executeScript",
148 | "target": "return Array.from({length: 15}, (_, i) => i);",
149 | "targets": [],
150 | "value": "accounts"
151 | }, {
152 | "id": "9d331980-9f39-42f1-b249-5e76d2eace19",
153 | "comment": "",
154 | "command": "forEach",
155 | "target": "accounts",
156 | "targets": [],
157 | "value": "numb"
158 | }, {
159 | "id": "a539fb01-e5b9-4171-9028-94ff59ac7a5b",
160 | "comment": "",
161 | "command": "pause",
162 | "target": "450",
163 | "targets": [],
164 | "value": ""
165 | }, {
166 | "id": "6d6f70da-b800-4383-a2f5-8988507a9aaa",
167 | "comment": "",
168 | "command": "click",
169 | "target": "id=rename${numb}",
170 | "targets": [],
171 | "value": ""
172 | }, {
173 | "id": "a270ce55-d46d-4a05-8c52-25e1ed2e3ccd",
174 | "comment": "",
175 | "command": "click",
176 | "target": "id=input${numb}",
177 | "targets": [
178 | ["id=input0", "id"],
179 | ["css=#input0", "css:finder"],
180 | ["xpath=//input[@id='input0']", "xpath:attributes"],
181 | ["xpath=//div[@id='dvID0']/input", "xpath:idRelative"],
182 | ["xpath=//td/div/div/div/div/input", "xpath:position"]
183 | ],
184 | "value": ""
185 | }, {
186 | "id": "e5307381-1311-4c11-82e5-e7fd3502c02c",
187 | "comment": "",
188 | "command": "type",
189 | "target": "id=input${numb}",
190 | "targets": [
191 | ["id=input0", "id"],
192 | ["css=#input0", "css:finder"],
193 | ["xpath=//input[@id='input0']", "xpath:attributes"],
194 | ["xpath=//div[@id='dvID0']/input", "xpath:idRelative"],
195 | ["xpath=//td/div/div/div/div/input", "xpath:position"]
196 | ],
197 | "value": "${numb}-CMA-EDGE"
198 | }, {
199 | "id": "22dab363-342b-42d1-9981-c386c8cfa8f7",
200 | "comment": "",
201 | "command": "click",
202 | "target": "id=rename${numb}",
203 | "targets": [
204 | ["id=rename0", "id"],
205 | ["css=#rename0", "css:finder"],
206 | ["xpath=//a[@id='rename0']", "xpath:attributes"],
207 | ["xpath=//tr[@id='GEGrid1_tr_0_0']/td[2]/div/div/div/a", "xpath:idRelative"],
208 | ["xpath=//a[contains(@href, \"javascript:Rename('input0','rename0',0,'');\")]", "xpath:href"],
209 | ["xpath=//td[2]/div/div/div/a", "xpath:position"]
210 | ],
211 | "value": ""
212 | }, {
213 | "id": "32b99ebd-9b74-43f6-a086-5c8bc427e207",
214 | "comment": "",
215 | "command": "echo",
216 | "target": "${numb} Account Name Updated",
217 | "targets": [],
218 | "value": ""
219 | }, {
220 | "id": "2871e4c8-e4d8-4533-9898-7855363dcb75",
221 | "comment": "",
222 | "command": "end",
223 | "target": "",
224 | "targets": [],
225 | "value": ""
226 | }, {
227 | "id": "eacc5aff-c1a9-4e93-ba52-54ba6d6c28e3",
228 | "comment": "",
229 | "command": "click",
230 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ctl00_btnSave",
231 | "targets": [
232 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ctl00_btnSave", "id"],
233 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ctl00_btnSave", "css:finder"],
234 | ["xpath=//span[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ctl00_btnSave']", "xpath:attributes"],
235 | ["xpath=//a[@id='lnkSaveDisplayOptions']/span", "xpath:idRelative"],
236 | ["xpath=//p/a[2]/span", "xpath:position"],
237 | ["xpath=//span[contains(.,'Save Changes')]", "xpath:innerText"]
238 | ],
239 | "value": ""
240 | }, {
241 | "id": "52e9e6c4-dd85-49c2-98c3-07584b414080",
242 | "comment": "",
243 | "command": "open",
244 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
245 | "targets": [],
246 | "value": ""
247 | }, {
248 | "id": "22a0ec9f-5b9c-4523-a669-779bbcf70018",
249 | "comment": "",
250 | "command": "echo",
251 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
252 | "targets": [],
253 | "value": ""
254 | }]
255 | }, {
256 | "id": "a8abba1b-36b1-4572-83e7-52e5bee21c54",
257 | "name": "- Vanguard Withdrawal Tool",
258 | "commands": [{
259 | "id": "ae22a01c-0ea3-4818-b62e-a17c608cda2f",
260 | "comment": "",
261 | "command": "echo",
262 | "target": "Vanguard Automated Withdrawal Tool has been provided for the public. Fidelity, Chase, Schwab, Wellstrade is available for Gold Sponsors. ",
263 | "targets": [],
264 | "value": ""
265 | }, {
266 | "id": "cafb2351-d9a4-42a6-a3a3-b4fa74ce452b",
267 | "comment": "",
268 | "command": "echo",
269 | "target": "The following has been provided \"as is\", no updates/improvements will be added for this public version. ",
270 | "targets": [],
271 | "value": ""
272 | }, {
273 | "id": "a2d826e6-25a3-483d-99c6-d17e93d395cd",
274 | "comment": "",
275 | "command": "open",
276 | "target": "https://holdings.web.vanguard.com/",
277 | "targets": [],
278 | "value": ""
279 | }, {
280 | "id": "fa25d989-aa83-4f16-97c9-8bd9efd5ad74",
281 | "comment": "",
282 | "command": "executeScript",
283 | "target": "return 50;",
284 | "targets": [],
285 | "value": "minimum_balance"
286 | }, {
287 | "id": "ddf1d6c8-02ad-4a5c-8026-8811aeaf65d5",
288 | "comment": "",
289 | "command": "executeScript",
290 | "target": "return 20;",
291 | "targets": [],
292 | "value": "minimum_withdrawl"
293 | }, {
294 | "id": "a4ac8ae3-ff82-45c4-b3cc-b278c29d18ff",
295 | "comment": "DRY mode: 1= enabled, 0= disabled",
296 | "command": "store",
297 | "target": "0",
298 | "targets": [],
299 | "value": "DRY"
300 | }, {
301 | "id": "f09c6cb6-afda-427d-8b23-cd98a1142610",
302 | "comment": "",
303 | "command": "click",
304 | "target": "xpath=//span[contains(.,'Expand all accounts')]",
305 | "targets": [
306 | ["css=.c11n-link--primary:nth-child(1) > .c11n-link__content", "css:finder"],
307 | ["xpath=//main[@id='app-main-content']/ss-lib-page-layout/section/div[2]/div/div[4]/div/app-holdings/div/div/button/span", "xpath:idRelative"],
308 | ["xpath=//app-holdings/div/div/button/span", "xpath:position"],
309 | ["xpath=//span[contains(.,'Expand all accounts')]", "xpath:innerText"]
310 | ],
311 | "value": ""
312 | }, {
313 | "id": "8416a05b-1a95-4d6a-96e5-486ede46e753",
314 | "comment": "",
315 | "command": "pause",
316 | "target": "2000",
317 | "targets": [],
318 | "value": ""
319 | }, {
320 | "id": "e153750d-2ce3-49eb-acb4-5f5c642eacd3",
321 | "comment": "",
322 | "command": "executeScript",
323 | "target": "const accordions = document.querySelectorAll('c11n-accordion'); const filteredAccordions = Array.from(accordions).filter(accordion => { const headingText = accordion.querySelector('span.c11n-accordion__heading span').textContent; return headingText.includes('Brokerage Account') && !headingText.includes('IRA'); }); const hrefList = []; filteredAccordions.forEach(accordion => { const anchors = accordion.querySelectorAll('a.c11n-nav-overflow__a.c11n-menu__item'); anchors.forEach(anchor => { const href = anchor.getAttribute('href'); if (href.includes('ExchangeFunds') && href.endsWith('onRetirementMode=true')) { hrefList.push(href); } }); }); return (hrefList);",
324 | "targets": [],
325 | "value": "list"
326 | }, {
327 | "id": "169bae20-fba1-490b-a753-8e4327707f67",
328 | "comment": "",
329 | "command": "executeScript",
330 | "target": "return 1;",
331 | "targets": [],
332 | "value": "i"
333 | }, {
334 | "id": "7ce54612-6c6b-476f-9b1b-2e451b73d6f2",
335 | "comment": "",
336 | "command": "echo",
337 | "target": "${list}",
338 | "targets": [],
339 | "value": ""
340 | }, {
341 | "id": "373b33f1-52e4-4121-b1e8-c37c54557b71",
342 | "comment": "",
343 | "command": "forEach",
344 | "target": "list",
345 | "targets": [],
346 | "value": "url"
347 | }, {
348 | "id": "1dc8ea4a-6217-4527-9590-ad8fd7ba3153",
349 | "comment": "",
350 | "command": "if",
351 | "target": "${i} == 1",
352 | "targets": [],
353 | "value": ""
354 | }, {
355 | "id": "af96b854-9ccf-4e0b-a736-19fc42c200ee",
356 | "comment": "",
357 | "command": "echo",
358 | "target": "Skipping first account. ",
359 | "targets": [],
360 | "value": ""
361 | }, {
362 | "id": "ecc0458c-fb38-49f9-9427-d0ad08c26992",
363 | "comment": "",
364 | "command": "executeScript",
365 | "target": "return ${i} + 1;",
366 | "targets": [],
367 | "value": "i"
368 | }, {
369 | "id": "50777c07-bb9a-43e3-9103-9840a3cafdad",
370 | "comment": "",
371 | "command": "else",
372 | "target": "",
373 | "targets": [],
374 | "value": ""
375 | }, {
376 | "id": "b9344dc5-5052-4593-b9c3-abeed484bec2",
377 | "comment": "",
378 | "command": "open",
379 | "target": "${url}",
380 | "targets": [],
381 | "value": ""
382 | }, {
383 | "id": "c9241ece-4b34-46e8-92b3-4024cca23c4c",
384 | "comment": "",
385 | "command": "click",
386 | "target": "xpath=//span[2]/label/input",
387 | "targets": [
388 | ["xpath=//span[2]/label/input", "xpath:position"]
389 | ],
390 | "value": ""
391 | }, {
392 | "id": "62ed68ef-6ba4-42fa-8151-ca79cdce889a",
393 | "comment": "",
394 | "command": "storeText",
395 | "target": "xpath=/html/body/div[2]/div[6]/span[1]/div/div/div/span/form/span[2]/div/div[5]/span/div/span/div/span/span[1]/span[${i}]/div/div/div[2]/div/span/div/span/span[1]/span/span[1]/table/tbody/tr[2]/td[3]/span/span[1]/span/span[1]/span",
396 | "targets": [],
397 | "value": "balance"
398 | }, {
399 | "id": "235ffce6-b234-4647-8e50-e978366d4c63",
400 | "comment": "",
401 | "command": "executeScript",
402 | "target": "var balance = ${balance}; var minAmountToKeep = ${minimum_balance}; var cleanedBalance = parseFloat(balance.replace(/[$,]/g, '')); var amountToWithdraw = cleanedBalance - minAmountToKeep; amountToWithdraw = Math.max(0, amountToWithdraw); return (amountToWithdraw - 0.05).toFixed(2);",
403 | "targets": [],
404 | "value": "amount"
405 | }, {
406 | "id": "dc80db2a-2c91-48ed-abce-2dc274ee19b3",
407 | "comment": "",
408 | "command": "if",
409 | "target": "${amount} > 0 && ${amount} > ${minimum_withdrawl}",
410 | "targets": [],
411 | "value": ""
412 | }, {
413 | "id": "ab6f3dea-9be7-4625-92d1-f139d9be0911",
414 | "comment": "",
415 | "command": "pause",
416 | "target": "1250",
417 | "targets": [],
418 | "value": ""
419 | }, {
420 | "id": "6ab8113f-65ef-4067-a833-72a3b873e12f",
421 | "comment": "",
422 | "command": "storeXpathCount",
423 | "target": "xpath=//span[3]/input",
424 | "targets": [],
425 | "value": "drop_one"
426 | }, {
427 | "id": "6895e166-2207-4164-830f-0f564d408963",
428 | "comment": "",
429 | "command": "storeXpathCount",
430 | "target": "xpath=//span[2]/span[3]/input",
431 | "targets": [],
432 | "value": "drop_two"
433 | }, {
434 | "id": "1581f6d4-8676-4cb3-a1eb-e9eedbd23128",
435 | "comment": "",
436 | "command": "if",
437 | "target": "${drop_one} == 1",
438 | "targets": [],
439 | "value": ""
440 | }, {
441 | "id": "6705e53a-2184-4bf3-a966-76cf897f3bd5",
442 | "comment": "",
443 | "command": "click",
444 | "target": "xpath=//span[3]/input",
445 | "targets": [
446 | ["xpath=//span[3]/input", "xpath:position"]
447 | ],
448 | "value": ""
449 | }, {
450 | "id": "41f090ea-7dfd-4c08-afde-2b18416e6e92",
451 | "comment": "",
452 | "command": "sendKeys",
453 | "target": "xpath=//span[3]/input",
454 | "targets": [
455 | ["id=buysellForm:dollarInputAmountsellAccount0559423304152718", "id"],
456 | ["name=buysellForm:dollarInputAmountsellAccount0559423304152718", "name"],
457 | ["css=#buysellForm\\3A dollarInputAmountsellAccount0559423304152718", "css:finder"],
458 | ["xpath=//input[@id='buysellForm:dollarInputAmountsellAccount0559423304152718']", "xpath:attributes"],
459 | ["xpath=//span[@id='comp-buysellForm:dollarInputAmountsellAccount0559423304152718']/span[3]/input", "xpath:idRelative"],
460 | ["xpath=//span[3]/input", "xpath:position"]
461 | ],
462 | "value": "${amount}"
463 | }, {
464 | "id": "5cd38680-412f-4f9b-8c00-1159281b19a1",
465 | "comment": "",
466 | "command": "elseIf",
467 | "target": "${drop_two} == 1",
468 | "targets": [],
469 | "value": ""
470 | }, {
471 | "id": "3027dbd3-f849-4349-b19a-7ea50d10faff",
472 | "comment": "",
473 | "command": "click",
474 | "target": "xpath=//span[2]/span[3]/input",
475 | "targets": [
476 | ["id=buysellForm:dollarInputAmountsellAccount3580522330121557", "id"],
477 | ["name=buysellForm:dollarInputAmountsellAccount3580522330121557", "name"],
478 | ["css=#buysellForm\\3A dollarInputAmountsellAccount3580522330121557", "css:finder"],
479 | ["xpath=//input[@id='buysellForm:dollarInputAmountsellAccount3580522330121557']", "xpath:attributes"],
480 | ["xpath=//span[@id='comp-buysellForm:dollarInputAmountsellAccount3580522330121557']/span[3]/input", "xpath:idRelative"],
481 | ["xpath=//span[2]/span[3]/input", "xpath:position"]
482 | ],
483 | "value": ""
484 | }, {
485 | "id": "1b743396-dfb5-4475-b073-5b4c70b68ab3",
486 | "comment": "",
487 | "command": "sendKeys",
488 | "target": "xpath=//span[2]/span[3]/input",
489 | "targets": [],
490 | "value": "${amount}"
491 | }, {
492 | "id": "f1f61354-650f-4c8f-8af9-0e33da056967",
493 | "comment": "",
494 | "command": "end",
495 | "target": "",
496 | "targets": [],
497 | "value": ""
498 | }, {
499 | "id": "c764defd-a576-4456-8066-f36e84d38d3e",
500 | "comment": "",
501 | "command": "click",
502 | "target": "id=buysellForm:exchangeEditContinueInput",
503 | "targets": [
504 | ["id=buysellForm:exchangeEditContinueInput", "id"],
505 | ["css=#buysellForm\\3A exchangeEditContinueInput", "css:finder"],
506 | ["xpath=//input[@id='buysellForm:exchangeEditContinueInput']", "xpath:attributes"],
507 | ["xpath=//span[@id='buysellForm:exchangeEditContinue']/div/span/div/input", "xpath:idRelative"],
508 | ["xpath=//span/table/tbody/tr/td[2]/span/span/span/div/span/div/input", "xpath:position"]
509 | ],
510 | "value": ""
511 | }, {
512 | "id": "253ad9ea-cd6e-4b53-99b0-65e81d58dbe1",
513 | "comment": "",
514 | "command": "pause",
515 | "target": "1900",
516 | "targets": [],
517 | "value": ""
518 | }, {
519 | "id": "23effaa3-cd43-4b1c-99c6-84223f15a1f9",
520 | "comment": "",
521 | "command": "click",
522 | "target": "id=buysellForm:buyAccountNavBox0_headcontent",
523 | "targets": [
524 | ["id=buysellForm:buyAccountNavBox0_headcontent", "id"],
525 | ["css=#buysellForm\\3A buyAccountNavBox0_headcontent", "css:finder"],
526 | ["xpath=//div[@id='buysellForm:buyAccountNavBox0_headcontent']", "xpath:attributes"],
527 | ["xpath=//div[@id='buysellForm:buyAccountNavBox0_head']/span/div/div", "xpath:idRelative"],
528 | ["xpath=//div[6]/div/span/div/span/div/span/span/span/div/div/div/span/div/div", "xpath:position"]
529 | ],
530 | "value": ""
531 | }, {
532 | "id": "a3468889-1860-4540-9d3d-0c529bb6d374",
533 | "comment": "",
534 | "command": "click",
535 | "target": "xpath=//tr[5]/td/span/span/span/span[2]/label/input",
536 | "targets": [
537 | ["xpath=//tr[5]/td/span/span/span/span[2]/label/input", "xpath:position"]
538 | ],
539 | "value": ""
540 | }, {
541 | "id": "00e38880-615a-4352-8819-836ff3c949e1",
542 | "comment": "",
543 | "command": "pause",
544 | "target": "1500",
545 | "targets": [],
546 | "value": ""
547 | }, {
548 | "id": "46bd4204-86e0-4a36-87d8-da0a90aca230",
549 | "comment": "",
550 | "command": "click",
551 | "target": "id=buysellForm:exchangeEditBuyContinueInput",
552 | "targets": [
553 | ["id=buysellForm:exchangeEditBuyContinueInput", "id"],
554 | ["css=#buysellForm\\3A exchangeEditBuyContinueInput", "css:finder"],
555 | ["xpath=//input[@id='buysellForm:exchangeEditBuyContinueInput']", "xpath:attributes"],
556 | ["xpath=//span[@id='buysellForm:exchangeEditBuyContinue']/div/span/div/input", "xpath:idRelative"],
557 | ["xpath=//div[8]/span/span/table/tbody/tr/td/span/span/span/div/span/div/input", "xpath:position"]
558 | ],
559 | "value": ""
560 | }, {
561 | "id": "a4a7c258-be34-4b2b-8923-20435a08e4f3",
562 | "comment": "",
563 | "command": "pause",
564 | "target": "1500",
565 | "targets": [],
566 | "value": ""
567 | }, {
568 | "id": "a4b3efcb-43ea-4281-b62f-894292b83243",
569 | "comment": "",
570 | "command": "storeXpathCount",
571 | "target": "xpath=//*[@id=\"buysellForm:invalidSpecialPayeeInput\"]",
572 | "targets": [],
573 | "value": "error"
574 | }, {
575 | "id": "0d6a9347-6a54-4395-aa5f-bcd3c409752c",
576 | "comment": "",
577 | "command": "if",
578 | "target": "${error} != 1",
579 | "targets": [],
580 | "value": ""
581 | }, {
582 | "id": "5beeb388-7bd1-4916-b260-3e1b6c835492",
583 | "comment": "",
584 | "command": "click",
585 | "target": "xpath=//span[2]/span/span/div/span/div/input",
586 | "targets": [
587 | ["id=exchangeReviewLayerForm:exchangeConsentAcceptReviewInput", "id"],
588 | ["css=#exchangeReviewLayerForm\\3A exchangeConsentAcceptReviewInput", "css:finder"],
589 | ["xpath=//input[@id='exchangeReviewLayerForm:exchangeConsentAcceptReviewInput']", "xpath:attributes"],
590 | ["xpath=//span[@id='exchangeReviewLayerForm:exchangeConsentAcceptReview']/div/span/div/input", "xpath:idRelative"],
591 | ["xpath=//span[2]/span/span/div/span/div/input", "xpath:position"]
592 | ],
593 | "value": ""
594 | }, {
595 | "id": "86c3ce8c-c283-49b7-8d37-d052731fbe51",
596 | "comment": "",
597 | "command": "if",
598 | "target": "${DRY} != 1",
599 | "targets": [],
600 | "value": ""
601 | }, {
602 | "id": "dde77657-a103-4860-8fda-e886e37ec657",
603 | "comment": "",
604 | "command": "click",
605 | "target": "id=buysellForm:exchangeReviewSubmitInput",
606 | "targets": [
607 | ["id=buysellForm:exchangeReviewSubmitInput", "id"],
608 | ["css=#buysellForm\\3A exchangeReviewSubmitInput", "css:finder"],
609 | ["xpath=//input[@id='buysellForm:exchangeReviewSubmitInput']", "xpath:attributes"],
610 | ["xpath=//span[@id='buysellForm:exchangeReviewSubmit']/div/span/div/input", "xpath:idRelative"],
611 | ["xpath=//td[2]/span[3]/span/span/div/span/div/input", "xpath:position"]
612 | ],
613 | "value": ""
614 | }, {
615 | "id": "06932125-4b9f-4bc6-897d-622a1ee2ea8d",
616 | "comment": "",
617 | "command": "end",
618 | "target": "",
619 | "targets": [],
620 | "value": ""
621 | }, {
622 | "id": "78a4d771-3319-46d2-b013-383cb7a1baea",
623 | "comment": "",
624 | "command": "end",
625 | "target": "",
626 | "targets": [],
627 | "value": ""
628 | }, {
629 | "id": "ad8ac184-36b8-4ab8-b49a-297dcd7f78eb",
630 | "comment": "",
631 | "command": "else",
632 | "target": "",
633 | "targets": [],
634 | "value": ""
635 | }, {
636 | "id": "6189e3b6-b996-4d6b-8b72-3261a4a8a0db",
637 | "comment": "",
638 | "command": "echo",
639 | "target": "Not enough funds to meet minimum: ${amount}",
640 | "targets": [],
641 | "value": ""
642 | }, {
643 | "id": "0217370a-3a78-4fdd-8a07-03208662f7c7",
644 | "comment": "",
645 | "command": "end",
646 | "target": "",
647 | "targets": [],
648 | "value": ""
649 | }, {
650 | "id": "056efd7d-8363-4662-93bf-f54275740333",
651 | "comment": "",
652 | "command": "executeScript",
653 | "target": "return ${i} + 1;",
654 | "targets": [],
655 | "value": "i"
656 | }, {
657 | "id": "b463577a-3383-45ce-9d72-5dad9e3f1b70",
658 | "comment": "",
659 | "command": "end",
660 | "target": "",
661 | "targets": [],
662 | "value": ""
663 | }, {
664 | "id": "ce2a2800-a015-4ad8-b68e-38a66290845b",
665 | "comment": "",
666 | "command": "end",
667 | "target": "",
668 | "targets": [],
669 | "value": ""
670 | }, {
671 | "id": "3ce7fdb0-bb7d-4363-b02f-6a4da6a72ce7",
672 | "comment": "",
673 | "command": "open",
674 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
675 | "targets": [],
676 | "value": ""
677 | }, {
678 | "id": "ad794090-adf8-4501-87de-d4202869b94b",
679 | "comment": "",
680 | "command": "echo",
681 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
682 | "targets": [],
683 | "value": ""
684 | }]
685 | }],
686 | "suites": [{
687 | "id": "6d1373e6-7a21-4814-b8c8-e041000d57b3",
688 | "name": "Account Rename Tool",
689 | "persistSession": false,
690 | "parallel": false,
691 | "timeout": 300,
692 | "tests": ["208cfed9-1e03-448d-91ad-1364fa16bc02"]
693 | }, {
694 | "id": "664d0d8b-ed95-4ff5-bc85-0e08c0d9b713",
695 | "name": "Account Withdrawal Tool",
696 | "persistSession": false,
697 | "parallel": false,
698 | "timeout": 300,
699 | "tests": ["a8abba1b-36b1-4572-83e7-52e5bee21c54"]
700 | }],
701 | "urls": ["https://digital.fidelity.com/", "http://localhost/"],
702 | "plugins": []
703 | }
--------------------------------------------------------------------------------
/src/Selenium_IDE/Fidelity_Auto.side:
--------------------------------------------------------------------------------
1 | {
2 | "id": "a249f397-d556-4703-83ee-4aca00e2495d",
3 | "version": "2.0",
4 | "name": "Fidelity",
5 | "url": "https://digital.fidelity.com/ftgw/digital/trade-equity/index/orderEntry",
6 | "tests": [{
7 | "id": "685c8f77-8fe3-45fc-8e13-51b6c4fea30c",
8 | "name": "+ Fidelity Buy",
9 | "commands": [{
10 | "id": "15dbef43-b5dd-4baf-8460-bc6b5744cea5",
11 | "comment": "",
12 | "command": "store",
13 | "target": "TICKERHERE",
14 | "targets": [],
15 | "value": "TICKER"
16 | }, {
17 | "id": "51277964-fd77-466b-9595-0617964dbc41",
18 | "comment": "",
19 | "command": "executeScript",
20 | "target": "return 1.50",
21 | "targets": [],
22 | "value": "LIMIT"
23 | }, {
24 | "id": "caf64a5f-ec83-4936-a580-b4afbb74a291",
25 | "comment": "",
26 | "command": "store",
27 | "target": "1",
28 | "targets": [],
29 | "value": "QUANT"
30 | }, {
31 | "id": "69023bbe-e23a-4eda-8928-12096f54902c",
32 | "comment": "",
33 | "command": "store",
34 | "target": "0",
35 | "targets": [],
36 | "value": "index"
37 | }, {
38 | "id": "e62688a7-bc0e-49df-936e-e4e0b203b2f3",
39 | "comment": "",
40 | "command": "executeScript",
41 | "target": "return \"SLICE_TARGET\".trim();",
42 | "targets": [],
43 | "value": "target"
44 | }, {
45 | "id": "99219aba-29c5-4f95-850c-4bfd09bacec2",
46 | "comment": "",
47 | "command": "store",
48 | "target": "0",
49 | "targets": [],
50 | "value": "dynamic"
51 | }, {
52 | "id": "9801549d-8263-49c4-ae31-6228d5e23b0a",
53 | "comment": "",
54 | "command": "if",
55 | "target": "${dynamic} == 0",
56 | "targets": [],
57 | "value": ""
58 | }, {
59 | "id": "0d2f24ca-310d-41b1-9791-c34b9b9b8333",
60 | "comment": "",
61 | "command": "executeScript",
62 | "target": "return [ ['Account','one','here' ], [ 'Account','two','here' ] ];",
63 | "targets": [],
64 | "value": "accounts"
65 | }, {
66 | "id": "b4d25122-e12d-45a5-9fa5-2685605df813",
67 | "comment": "",
68 | "command": "executeScript",
69 | "target": "let accounts = ${accounts}; return accounts[${index}].slice(accounts[${index}].indexOf(${target}) + 1);",
70 | "targets": [],
71 | "value": "list"
72 | }, {
73 | "id": "7336eef1-154e-4739-87d7-e7d82368962f",
74 | "comment": "",
75 | "command": "elseIf",
76 | "target": "${dynamic} == 1",
77 | "targets": [],
78 | "value": ""
79 | }, {
80 | "id": "603b85cd-bfa5-4280-9443-34e73bd550bf",
81 | "comment": "",
82 | "command": "open",
83 | "target": "https://digital.fidelity.com/ftgw/digital/portfolio/summary",
84 | "targets": [],
85 | "value": ""
86 | }, {
87 | "id": "82555785-74d8-4acf-a065-8c13acd3126b",
88 | "comment": "",
89 | "command": "pause",
90 | "target": "2250",
91 | "targets": [],
92 | "value": ""
93 | }, {
94 | "id": "11bc161e-9252-4dfd-899d-8fc8b62c6fde",
95 | "comment": "",
96 | "command": "executeScript",
97 | "target": "const elements = document.getElementsByClassName(\"acct-selector__acct-num\"); const textArray = []; for (let i = 0; i < elements.length; i++) { const text = elements[i].textContent.trim(); textArray.push(text); } return textArray;",
98 | "targets": [],
99 | "value": "accounts"
100 | }, {
101 | "id": "6f903db5-f3db-457f-abbb-669d86c0f14b",
102 | "comment": "",
103 | "command": "executeScript",
104 | "target": "let accounts = ${accounts}; return accounts.slice(accounts.indexOf(${target}) + 1);",
105 | "targets": [],
106 | "value": "list"
107 | }, {
108 | "id": "8ec6b851-da4d-40d8-add8-4cbc86a2d0e8",
109 | "comment": "",
110 | "command": "end",
111 | "target": "",
112 | "targets": [],
113 | "value": ""
114 | }, {
115 | "id": "e43ad2b7-f9b0-4f3b-a8e1-44f2ead58779",
116 | "comment": "",
117 | "command": "executeScript",
118 | "target": "return ${TICKER}.split(\",\");",
119 | "targets": [],
120 | "value": "TICKERS"
121 | }, {
122 | "id": "00b0aa03-8311-4925-9d8e-9a96d8392761",
123 | "comment": "",
124 | "command": "forEach",
125 | "target": "list",
126 | "targets": [],
127 | "value": "account"
128 | }, {
129 | "id": "25adc79e-a66b-4881-8326-2ac24f570ae0",
130 | "comment": "",
131 | "command": "forEach",
132 | "target": "TICKERS",
133 | "targets": [],
134 | "value": "TICK"
135 | }, {
136 | "id": "5c8539cb-a215-423a-b583-c70ab71dd04d",
137 | "comment": "",
138 | "command": "echo",
139 | "target": "STARTING: ${account} BUY Order for ${TICK}",
140 | "targets": [],
141 | "value": ""
142 | }, {
143 | "id": "8b43dcdd-ba19-4ec2-afb3-eae7ae3c87dd",
144 | "comment": "",
145 | "command": "open",
146 | "target": "https://oltx.fidelity.com/ftgw/fbc/oftrade/stockInit?ignoreRedirect=Y&ORDER_TYPE=E&ACCOUNT=${account}&SYMBOL=${TICK}&PRICE_TYPE=L&ORDER_ACTION=B&QTY=${QUANT}&AMOUNT=${LIMIT}&SKIP_ORDER_PREVIEW=Y",
147 | "targets": [],
148 | "value": ""
149 | }, {
150 | "id": "a6324823-db4b-4bf3-8a97-c2bf60761025",
151 | "comment": "",
152 | "command": "click",
153 | "target": "css=#action-buy s-assigned-wrapper",
154 | "targets": [
155 | ["css=#action-buy s-assigned-wrapper", "css:finder"],
156 | ["xpath=//pvd3-segment[@id='action-buy']/s-root/div/label/s-slot/s-assigned-wrapper", "xpath:idRelative"],
157 | ["xpath=//label/s-slot/s-assigned-wrapper", "xpath:position"]
158 | ],
159 | "value": ""
160 | }, {
161 | "id": "a8fd4168-033f-47e4-89ca-62c6ce227559",
162 | "comment": "",
163 | "command": "click",
164 | "target": "css=#market-no s-slot",
165 | "targets": [
166 | ["css=#market-no s-slot", "css:finder"],
167 | ["xpath=//pvd3-segment[@id='market-no']/s-root/div/label/s-slot", "xpath:idRelative"],
168 | ["xpath=//div[2]/div[2]/div/div/pvd3-segmented-control/s-root/div/div/s-slot/s-assigned-wrapper/pvd3-segment[2]/s-root/div/label/s-slot", "xpath:position"]
169 | ],
170 | "value": ""
171 | }, {
172 | "id": "ac3b1fa5-f2e4-4d2e-be74-c4067667b3be",
173 | "comment": "",
174 | "command": "waitForElementPresent",
175 | "target": "id=eqt-ordsel-limit-price-label",
176 | "targets": [
177 | ["id=eqt-ordsel-limit-price-label", "id"],
178 | ["css=#eqt-ordsel-limit-price-label", "css:finder"],
179 | ["xpath=//label[@id='eqt-ordsel-limit-price-label']", "xpath:attributes"],
180 | ["xpath=//div[@id='limit-price']/label", "xpath:idRelative"],
181 | ["xpath=//div[2]/div/label", "xpath:position"],
182 | ["xpath=//label[contains(.,'Limit price')]", "xpath:innerText"]
183 | ],
184 | "value": "30000"
185 | }, {
186 | "id": "5b675ccd-8948-44e3-9adb-12924e894929",
187 | "comment": "",
188 | "command": "click",
189 | "target": "id=eqt-ordsel-limit-price-label",
190 | "targets": [
191 | ["id=eqt-ordsel-limit-price-label", "id"],
192 | ["css=#eqt-ordsel-limit-price-label", "css:finder"],
193 | ["xpath=//label[@id='eqt-ordsel-limit-price-label']", "xpath:attributes"],
194 | ["xpath=//div[@id='limit-price']/label", "xpath:idRelative"],
195 | ["xpath=//div[2]/div/label", "xpath:position"],
196 | ["xpath=//label[contains(.,'Limit price')]", "xpath:innerText"]
197 | ],
198 | "value": ""
199 | }, {
200 | "id": "9146243c-4f0b-4aee-a6fa-614c7e28a6a5",
201 | "comment": "",
202 | "command": "waitForElementEditable",
203 | "target": "id=eqt-ordsel-limit-price-field",
204 | "targets": [],
205 | "value": "30000"
206 | }, {
207 | "id": "86a77a53-d144-4161-8b7b-395dfad3757f",
208 | "comment": "",
209 | "command": "clickAt",
210 | "target": "id=eqt-ordsel-limit-price-field",
211 | "targets": [],
212 | "value": ""
213 | }, {
214 | "id": "56b5cb2c-9185-4851-9912-f66c6c3a0311",
215 | "comment": "",
216 | "command": "sendKeys",
217 | "target": "id=eqt-ordsel-limit-price-field",
218 | "targets": [],
219 | "value": "${KEY_ENTER}"
220 | }, {
221 | "id": "06379a6f-e464-4f57-9c09-ec95f54708d6",
222 | "comment": "",
223 | "command": "click",
224 | "target": "css=#action-day s-assigned-wrapper",
225 | "targets": [
226 | ["css=#action-day s-assigned-wrapper", "css:finder"],
227 | ["xpath=//pvd3-segment[@id='action-day']/s-root/div/label/s-slot/s-assigned-wrapper", "xpath:idRelative"],
228 | ["xpath=//div[3]/div/div/pvd3-segmented-control/s-root/div/div/s-slot/s-assigned-wrapper/pvd3-segment/s-root/div/label/s-slot/s-assigned-wrapper", "xpath:position"]
229 | ],
230 | "value": ""
231 | }, {
232 | "id": "e6053b4c-d545-40bd-ac73-f497478841a0",
233 | "comment": "",
234 | "command": "pause",
235 | "target": "1300",
236 | "targets": [],
237 | "value": ""
238 | }, {
239 | "id": "e189cd2d-fabd-452c-985d-d8281ad3c993",
240 | "comment": "",
241 | "command": "executeScript",
242 | "target": "const xpath2 = '/html/body/div[3]/ap122489-ett-component/div/order-entry-base/div/div/div[2]/equity-order-routing/commission/div/div/div[1]/span'; const element2 = document.evaluate(xpath2,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue; return (((element2 && (element2.textContent.includes(\"--\") || element2.textContent.includes(\"--\")))));",
243 | "targets": [],
244 | "value": "error"
245 | }, {
246 | "id": "0f195b32-3c88-47c6-ba96-ea7cbb1f8e0d",
247 | "comment": "",
248 | "command": "if",
249 | "target": "${error}",
250 | "targets": [],
251 | "value": ""
252 | }, {
253 | "id": "4c115915-c9e8-4406-aa39-e5675829f5e6",
254 | "comment": "",
255 | "command": "sendKeys",
256 | "target": "id=eqt-ordsel-limit-price-field",
257 | "targets": [],
258 | "value": "${KEY_ENTER}"
259 | }, {
260 | "id": "59f5b6c9-8fc0-4245-beb2-c36047db443a",
261 | "comment": "",
262 | "command": "click",
263 | "target": "css=#action-gtc s-slot",
264 | "targets": [
265 | ["css=#action-gtc s-slot", "css:finder"],
266 | ["xpath=//pvd3-segment[@id='action-gtc']/s-root/div/label/s-slot", "xpath:idRelative"],
267 | ["xpath=//div[3]/div/div/pvd3-segmented-control/s-root/div/div/s-slot/s-assigned-wrapper/pvd3-segment[2]/s-root/div/label/s-slot", "xpath:position"]
268 | ],
269 | "value": ""
270 | }, {
271 | "id": "55b2ebbe-aa62-4107-9f09-c1ac60654da6",
272 | "comment": "",
273 | "command": "click",
274 | "target": "css=#action-day s-slot",
275 | "targets": [
276 | ["css=#action-day s-slot", "css:finder"],
277 | ["xpath=//pvd3-segment[@id='action-day']/s-root/div/label/s-slot", "xpath:idRelative"],
278 | ["xpath=//div[3]/div/div/pvd3-segmented-control/s-root/div/div/s-slot/s-assigned-wrapper/pvd3-segment/s-root/div/label/s-slot", "xpath:position"]
279 | ],
280 | "value": ""
281 | }, {
282 | "id": "36508b0f-58c4-4507-9c95-93c16294290f",
283 | "comment": "",
284 | "command": "end",
285 | "target": "",
286 | "targets": [],
287 | "value": ""
288 | }, {
289 | "id": "5422b4f3-049c-4241-9e92-c3907b96b935",
290 | "comment": "",
291 | "command": "click",
292 | "target": "css=#previewOrderBtn .pvd3-button-root",
293 | "targets": [
294 | ["css=#previewOrderBtn .pvd3-button-root", "css:finder"],
295 | ["xpath=(//button[@type='button'])[10]", "xpath:attributes"],
296 | ["xpath=//pvd3-button[@id='previewOrderBtn']/s-root/button", "xpath:idRelative"],
297 | ["xpath=//div[2]/div/div/div/pvd3-button/s-root/button", "xpath:position"],
298 | ["xpath=//button[contains(.,'Preview order')]", "xpath:innerText"]
299 | ],
300 | "value": ""
301 | }, {
302 | "id": "ed5e6df8-2812-4466-8c41-e1c0fcc7f471",
303 | "comment": "",
304 | "command": "click",
305 | "target": "id=placeOrderBtn",
306 | "targets": [
307 | ["id=placeOrderBtn", "id"],
308 | ["css=#placeOrderBtn", "css:finder"],
309 | ["xpath=//button[@id='placeOrderBtn']", "xpath:attributes"],
310 | ["xpath=//div[2]/div/div[3]/div/div/button", "xpath:position"],
311 | ["xpath=//button[contains(.,'Place order')]", "xpath:innerText"]
312 | ],
313 | "value": ""
314 | }, {
315 | "id": "f663fda9-612d-411f-b6de-8ea9ce568d08",
316 | "comment": "",
317 | "command": "echo",
318 | "target": "COMPLETED: ${account} Ordered ${TICK}",
319 | "targets": [],
320 | "value": ""
321 | }, {
322 | "id": "77fa486f-0fe9-4a57-8ad2-b7072275122b",
323 | "comment": "",
324 | "command": "end",
325 | "target": "",
326 | "targets": [],
327 | "value": ""
328 | }, {
329 | "id": "28aae527-b224-4222-89e0-20c979016df3",
330 | "comment": "",
331 | "command": "executeScript",
332 | "target": "return ${count} + 1;",
333 | "targets": [],
334 | "value": "count"
335 | }, {
336 | "id": "96575f14-2574-4f49-b8ca-99e9fe427610",
337 | "comment": "",
338 | "command": "executeScript",
339 | "target": " let totalSteps = ${list}.length * ${TICKERS}.length; let currentAccountIndex = ${list}.indexOf(${account}); let currentTickerIndex = ${TICKERS}.indexOf(${TICK}); let currentStep = (currentAccountIndex * ${TICKERS}.length) + currentTickerIndex + 1; let percentage = (currentStep / totalSteps) * 100; return percentage.toFixed(1);",
340 | "targets": [],
341 | "value": "progress"
342 | }, {
343 | "id": "b34ed3d7-2b62-4d7a-bafd-1187f1ce1b71",
344 | "comment": "",
345 | "command": "echo",
346 | "target": "${account} - ${TICK} DONE: (${progress}%)",
347 | "targets": [],
348 | "value": ""
349 | }, {
350 | "id": "46a53dd0-e413-4d4d-a94f-bd0db92a57a6",
351 | "comment": "",
352 | "command": "end",
353 | "target": "",
354 | "targets": [],
355 | "value": ""
356 | }, {
357 | "id": "d36dfb63-336f-47b3-a866-494e9f8a5509",
358 | "comment": "",
359 | "command": "open",
360 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
361 | "targets": [],
362 | "value": ""
363 | }, {
364 | "id": "b482296e-d59c-4337-8d3c-892af1e97857",
365 | "comment": "",
366 | "command": "echo",
367 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
368 | "targets": [],
369 | "value": ""
370 | }]
371 | }, {
372 | "id": "663b8ae4-3df7-4c2a-b3b1-7b57fe8e7162",
373 | "name": "- Fidelity Sell",
374 | "commands": [{
375 | "id": "caac9739-def8-4d8b-83e9-eba2cc0bb00a",
376 | "comment": "",
377 | "command": "store",
378 | "target": "TICKERHERE",
379 | "targets": [],
380 | "value": "TICKER"
381 | }, {
382 | "id": "eb3e268d-7156-4904-b0ed-ee0cec1c5ef5",
383 | "comment": "",
384 | "command": "store",
385 | "target": "1",
386 | "targets": [],
387 | "value": "QUANT"
388 | }, {
389 | "id": "3cef2882-9653-4e75-8d1e-6d7be2fae51f",
390 | "comment": "",
391 | "command": "store",
392 | "target": "0",
393 | "targets": [],
394 | "value": "index"
395 | }, {
396 | "id": "45dd1037-8b6b-4c14-85c5-31651477527a",
397 | "comment": "",
398 | "command": "store",
399 | "target": "0",
400 | "targets": [],
401 | "value": "dynamic"
402 | }, {
403 | "id": "85bea692-3a09-4056-9921-27fd1c96586a",
404 | "comment": "",
405 | "command": "executeScript",
406 | "target": "return \"SLICE_TARGET\".trim();",
407 | "targets": [],
408 | "value": "target"
409 | }, {
410 | "id": "f4916055-ed7a-4edf-8d7a-e8e11cbf9af9",
411 | "comment": "",
412 | "command": "if",
413 | "target": "${dynamic} == 0",
414 | "targets": [],
415 | "value": ""
416 | }, {
417 | "id": "32cf33c6-7b71-43eb-878e-63132ea3bbad",
418 | "comment": "",
419 | "command": "executeScript",
420 | "target": "return [ ['Account','one','here' ], [ 'Account','two','here' ] ];",
421 | "targets": [],
422 | "value": "accounts"
423 | }, {
424 | "id": "fa37f085-92aa-4c82-ad20-6d1b0eeda3f4",
425 | "comment": "",
426 | "command": "executeScript",
427 | "target": "let accounts = ${accounts}; return accounts[${index}].slice(accounts[${index}].indexOf(${target}) + 1);",
428 | "targets": [],
429 | "value": "list"
430 | }, {
431 | "id": "96c58f11-23ec-4f13-98ed-e0ebdadf5f63",
432 | "comment": "",
433 | "command": "elseIf",
434 | "target": "${dynamic} == 1",
435 | "targets": [],
436 | "value": ""
437 | }, {
438 | "id": "72a79079-e1e6-40cd-ba46-9e6d97a9b99d",
439 | "comment": "",
440 | "command": "open",
441 | "target": "https://digital.fidelity.com/ftgw/digital/portfolio/summary",
442 | "targets": [],
443 | "value": ""
444 | }, {
445 | "id": "dad67028-0db4-4174-9ed4-04d7bb8ca991",
446 | "comment": "",
447 | "command": "pause",
448 | "target": "1250",
449 | "targets": [],
450 | "value": ""
451 | }, {
452 | "id": "0b0a90ee-681b-496e-8363-e6dbdb40f366",
453 | "comment": "",
454 | "command": "executeScript",
455 | "target": "const elements = document.getElementsByClassName(\"acct-selector__acct-num\"); const textArray = []; for (let i = 0; i < elements.length; i++) { const text = elements[i].textContent.trim(); textArray.push(text); } return textArray;",
456 | "targets": [],
457 | "value": "accounts"
458 | }, {
459 | "id": "6ef5db96-c493-434f-adf6-2e1c51998c59",
460 | "comment": "",
461 | "command": "executeScript",
462 | "target": "let accounts = ${accounts}; return accounts.slice(accounts.indexOf(${target}) + 1);",
463 | "targets": [],
464 | "value": "list"
465 | }, {
466 | "id": "2a97573f-f13d-4cb7-88f2-8cf9e4bff569",
467 | "comment": "",
468 | "command": "end",
469 | "target": "",
470 | "targets": [],
471 | "value": ""
472 | }, {
473 | "id": "e9a1aa9b-6f8f-4c2b-91ee-a0da483ec060",
474 | "comment": "",
475 | "command": "executeScript",
476 | "target": "return ${TICKER}.split(\",\");",
477 | "targets": [],
478 | "value": "TICKERS"
479 | }, {
480 | "id": "cae7b3f1-d9ba-4199-80d1-e7cf817a9587",
481 | "comment": "",
482 | "command": "forEach",
483 | "target": "list",
484 | "targets": [],
485 | "value": "account"
486 | }, {
487 | "id": "8d934b3c-351c-4168-a9db-b174671377b3",
488 | "comment": "",
489 | "command": "forEach",
490 | "target": "TICKERS",
491 | "targets": [],
492 | "value": "TICK"
493 | }, {
494 | "id": "e981fb93-7a4f-41a6-9931-a7d4169dfb48",
495 | "comment": "",
496 | "command": "echo",
497 | "target": "STARTING: ${account} SELL Order for ${TICK}",
498 | "targets": [],
499 | "value": ""
500 | }, {
501 | "id": "f2426a45-a49c-4bfb-940e-f767bc9acadd",
502 | "comment": "",
503 | "command": "open",
504 | "target": "https://oltx.fidelity.com/ftgw/fbc/oftrade/stockInit?ignoreRedirect=Y&ORDER_TYPE=E&ACCOUNT=${account}&SYMBOL=${TICK}&PRICE_TYPE=L&ORDER_ACTION=S&QTY=${QUANT}&AMOUNT=111.03&SKIP_ORDER_PREVIEW=Y",
505 | "targets": [],
506 | "value": ""
507 | }, {
508 | "id": "8d904aa2-ef1b-47e3-94cd-923438578869",
509 | "comment": "",
510 | "command": "click",
511 | "target": "css=#market-yes s-slot",
512 | "targets": [
513 | ["css=#market-yes s-slot", "css:finder"],
514 | ["xpath=//pvd3-segment[@id='market-yes']/s-root/div/label/s-slot", "xpath:idRelative"],
515 | ["xpath=//div[2]/div[2]/div/div/pvd3-segmented-control/s-root/div/div/s-slot/s-assigned-wrapper/pvd3-segment/s-root/div/label/s-slot", "xpath:position"]
516 | ],
517 | "value": ""
518 | }, {
519 | "id": "3116c469-34c3-426a-ac9f-b2985cb09d2a",
520 | "comment": "",
521 | "command": "pause",
522 | "target": "1800",
523 | "targets": [],
524 | "value": ""
525 | }, {
526 | "id": "6ef49e21-0681-497d-9b98-dc7cade3af4b",
527 | "comment": "",
528 | "command": "click",
529 | "target": "css=#previewOrderBtn .pvd3-button-root",
530 | "targets": [
531 | ["css=#previewOrderBtn .pvd3-button-root", "css:finder"],
532 | ["xpath=(//button[@type='button'])[10]", "xpath:attributes"],
533 | ["xpath=//pvd3-button[@id='previewOrderBtn']/s-root/button", "xpath:idRelative"],
534 | ["xpath=//div[2]/div/div/div/pvd3-button/s-root/button", "xpath:position"],
535 | ["xpath=//button[contains(.,'Preview order')]", "xpath:innerText"]
536 | ],
537 | "value": ""
538 | }, {
539 | "id": "1a9e06ca-1718-43cc-bfbb-80a4d34dbfed",
540 | "comment": "",
541 | "command": "pause",
542 | "target": "1000",
543 | "targets": [],
544 | "value": ""
545 | }, {
546 | "id": "1d76441d-159d-48fd-a10f-33ffdb7c51a4",
547 | "comment": "",
548 | "command": "executeScript",
549 | "target": "const xpath2 = '/html/body/div[3]/ap122489-ett-component/div/pvd3-modal[1]/s-root/div/div[2]/div/div[2]/s-slot/s-assigned-wrapper/pvd3-inline-alert/s-root/div/div[2]/s-slot/s-assigned-wrapper/div'; const element2 = document.evaluate(xpath2,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue; return (((element2 && (element2.textContent.includes(\"do not have enough shares\") || element2.textContent.includes(\"was not found\")))));",
550 | "targets": [],
551 | "value": "result"
552 | }, {
553 | "id": "18875430-cb78-4906-866c-9649a5a253f3",
554 | "comment": "",
555 | "command": "if",
556 | "target": "${result} == true",
557 | "targets": [],
558 | "value": ""
559 | }, {
560 | "id": "180cd9f0-411b-4c3d-a854-293b9100e734",
561 | "comment": "",
562 | "command": "echo",
563 | "target": "${account}: Selling ${TICK} Failed. Security not in account",
564 | "targets": [],
565 | "value": ""
566 | }, {
567 | "id": "01eed2cc-76bd-4ae9-b284-43683a8a68a4",
568 | "comment": "",
569 | "command": "else",
570 | "target": "",
571 | "targets": [],
572 | "value": ""
573 | }, {
574 | "id": "41b9ccab-907c-4c18-86d5-52be7dd29524",
575 | "comment": "",
576 | "command": "click",
577 | "target": "id=placeOrderBtn",
578 | "targets": [
579 | ["id=placeOrderBtn", "id"],
580 | ["css=#placeOrderBtn", "css:finder"],
581 | ["xpath=//button[@id='placeOrderBtn']", "xpath:attributes"],
582 | ["xpath=//div[2]/div/div[3]/div/div/button", "xpath:position"],
583 | ["xpath=//button[contains(.,'Place order')]", "xpath:innerText"]
584 | ],
585 | "value": ""
586 | }, {
587 | "id": "728a334b-52c5-4778-8cf0-2a6d4f78b570",
588 | "comment": "",
589 | "command": "echo",
590 | "target": "COMPLETED: ${account} SOLD ${TICK}",
591 | "targets": [],
592 | "value": ""
593 | }, {
594 | "id": "ec8bd0b9-0f6a-41a8-be43-55c14ccae549",
595 | "comment": "",
596 | "command": "end",
597 | "target": "",
598 | "targets": [],
599 | "value": ""
600 | }, {
601 | "id": "e0b4c386-d7b7-4599-b351-4df562a47c10",
602 | "comment": "",
603 | "command": "end",
604 | "target": "",
605 | "targets": [],
606 | "value": ""
607 | }, {
608 | "id": "f2d2f5ed-3958-46ef-994c-7b598d5c5045",
609 | "comment": "",
610 | "command": "executeScript",
611 | "target": " let totalSteps = ${list}.length * ${TICKERS}.length; let currentAccountIndex = ${list}.indexOf(${account}); let currentTickerIndex = ${TICKERS}.indexOf(${TICK}); let currentStep = (currentAccountIndex * ${TICKERS}.length) + currentTickerIndex + 1; let percentage = (currentStep / totalSteps) * 100; return percentage.toFixed(1);",
612 | "targets": [],
613 | "value": "progress"
614 | }, {
615 | "id": "b4bcb70a-ade0-4f13-9235-79720b38ba8a",
616 | "comment": "",
617 | "command": "echo",
618 | "target": "${account} - ${TICK} DONE: (${progress}%)",
619 | "targets": [],
620 | "value": ""
621 | }, {
622 | "id": "a7a9bc6f-039a-41e4-86f6-685b6aefcd0b",
623 | "comment": "",
624 | "command": "end",
625 | "target": "",
626 | "targets": [],
627 | "value": ""
628 | }, {
629 | "id": "efa6e416-e179-42c4-9635-4d622664d9cb",
630 | "comment": "",
631 | "command": "open",
632 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
633 | "targets": [],
634 | "value": ""
635 | }, {
636 | "id": "a91f44a2-631e-48a5-8b09-97a7cca34a45",
637 | "comment": "",
638 | "command": "echo",
639 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
640 | "targets": [],
641 | "value": ""
642 | }]
643 | }, {
644 | "id": "2db8e529-1771-4461-b300-3e5027c85693",
645 | "name": "| Fidelity Login",
646 | "commands": [{
647 | "id": "efdf0883-1c21-4807-aa8f-c0bcd306d44c",
648 | "comment": "",
649 | "command": "store",
650 | "target": "0",
651 | "targets": [],
652 | "value": "action"
653 | }, {
654 | "id": "41e28a48-36ea-4f21-a522-02ac518528a0",
655 | "comment": "",
656 | "command": "if",
657 | "target": "${action} == 0",
658 | "targets": [],
659 | "value": ""
660 | }, {
661 | "id": "615f1a28-8146-4313-85a7-5693201d753e",
662 | "comment": "",
663 | "command": "open",
664 | "target": "https://digital.fidelity.com/prgw/digital/login/full-page?AuthRedUrl=https://digital.fidelity.com/ftgw/digital/portfolio/summary",
665 | "targets": [],
666 | "value": ""
667 | }, {
668 | "id": "3835fe1f-7ddc-473b-a3a4-55361aa6f6f3",
669 | "comment": "",
670 | "command": "store",
671 | "target": "LOGIN:HERE",
672 | "targets": [],
673 | "value": "FIDELITY_LOGIN"
674 | }, {
675 | "id": "360f7e65-2aba-4ad8-9736-ad54f21795e8",
676 | "comment": "",
677 | "command": "executeScript",
678 | "target": "return ${FIDELITY_LOGIN}.split(\":\");",
679 | "targets": [],
680 | "value": "LOGIN"
681 | }, {
682 | "id": "6db7699f-73a5-47c0-8192-466dfa2f796f",
683 | "comment": "",
684 | "command": "if",
685 | "target": " ${FIDELITY_LOGIN} != \"LOGIN:HERE\"",
686 | "targets": [],
687 | "value": ""
688 | }, {
689 | "id": "acc7743d-174c-48a7-aa06-f12decd6ef30",
690 | "comment": "",
691 | "command": "echo",
692 | "target": "It is not reccomended to use this method to automate a login. Proceed at your own risk.",
693 | "targets": [],
694 | "value": ""
695 | }, {
696 | "id": "d243563e-d248-4edd-ad29-e0f1bfba02e6",
697 | "comment": "",
698 | "command": "click",
699 | "target": "id=userId-input",
700 | "targets": [
701 | ["id=userId-input", "id"],
702 | ["css=#userId-input", "css:finder"],
703 | ["xpath=//input[@id='userId-input']", "xpath:attributes"],
704 | ["xpath=//div[@id='fs-username-div']/input", "xpath:idRelative"],
705 | ["xpath=//div/input", "xpath:position"]
706 | ],
707 | "value": ""
708 | }, {
709 | "id": "220cfd2d-ddf6-4b3e-afc7-2e5b744eab80",
710 | "comment": "",
711 | "command": "type",
712 | "target": "id=userId-input",
713 | "targets": [
714 | ["id=userId-input", "id"],
715 | ["css=#userId-input", "css:finder"],
716 | ["xpath=//input[@id='userId-input']", "xpath:attributes"],
717 | ["xpath=//div[@id='fs-username-div']/input", "xpath:idRelative"],
718 | ["xpath=//div/input", "xpath:position"]
719 | ],
720 | "value": "${LOGIN[0]}"
721 | }, {
722 | "id": "bc48fe54-c65a-4ed1-8f31-da30def0db3e",
723 | "comment": "",
724 | "command": "click",
725 | "target": "id=password",
726 | "targets": [
727 | ["id=password", "id"],
728 | ["name=PIN", "name"],
729 | ["css=#password", "css:finder"],
730 | ["xpath=//input[@id='password']", "xpath:attributes"],
731 | ["xpath=//div[@id='fs-password-div']/input", "xpath:idRelative"],
732 | ["xpath=//div[4]/div/input", "xpath:position"]
733 | ],
734 | "value": ""
735 | }, {
736 | "id": "2abc9cff-361a-4f93-b54f-17ea3d9b066a",
737 | "comment": "",
738 | "command": "type",
739 | "target": "id=password",
740 | "targets": [
741 | ["id=password", "id"],
742 | ["name=PIN", "name"],
743 | ["css=#password", "css:finder"],
744 | ["xpath=//input[@id='password']", "xpath:attributes"],
745 | ["xpath=//div[@id='fs-password-div']/input", "xpath:idRelative"],
746 | ["xpath=//div[4]/div/input", "xpath:position"]
747 | ],
748 | "value": "${LOGIN[1]}"
749 | }, {
750 | "id": "8b783b4f-a64f-4e05-9e19-f2639b7267e5",
751 | "comment": "",
752 | "command": "click",
753 | "target": "id=fs-login-button",
754 | "targets": [
755 | ["id=fs-login-button", "id"],
756 | ["css=#fs-login-button", "css:finder"],
757 | ["xpath=//button[@id='fs-login-button']", "xpath:attributes"],
758 | ["xpath=//div[@id='fs-submit-div']/button", "xpath:idRelative"],
759 | ["xpath=//button", "xpath:position"],
760 | ["xpath=//button[contains(.,'Log In')]", "xpath:innerText"]
761 | ],
762 | "value": ""
763 | }, {
764 | "id": "2e50c447-d85c-46ca-8a18-003da8727bae",
765 | "comment": "",
766 | "command": "end",
767 | "target": "",
768 | "targets": [],
769 | "value": ""
770 | }, {
771 | "id": "c4efb77a-dd55-40f4-9a22-1ca6fe134ccd",
772 | "comment": "",
773 | "command": "elseIf",
774 | "target": "${action} == 1",
775 | "targets": [],
776 | "value": ""
777 | }, {
778 | "id": "0ead23bc-2676-440a-9ef5-ccadbc2dfd51",
779 | "comment": "",
780 | "command": "open",
781 | "target": "https://digital.fidelity.com/ftgw/digital/portfolio/summary",
782 | "targets": [],
783 | "value": ""
784 | }, {
785 | "id": "a9ca9b0d-1341-4730-bd16-1d8e96becc8d",
786 | "comment": "",
787 | "command": "executeScript",
788 | "target": "const elements = document.getElementsByClassName(\"acct-selector__acct-num\"); const textArray = []; for (let i = 0; i < elements.length; i++) { const text = elements[i].textContent.trim(); textArray.push(text); } return textArray;",
789 | "targets": [],
790 | "value": "acc_array"
791 | }, {
792 | "id": "5a63d0b1-2c1f-4ae4-8b02-a7f0e93e76e8",
793 | "comment": "",
794 | "command": "echo",
795 | "target": "${acc_array}",
796 | "targets": [],
797 | "value": ""
798 | }, {
799 | "id": "c3657f82-8f80-4a86-84a9-947474233276",
800 | "comment": "",
801 | "command": "end",
802 | "target": "",
803 | "targets": [],
804 | "value": ""
805 | }]
806 | }],
807 | "suites": [{
808 | "id": "2076ccc1-f9b5-4a8f-a8b7-45c11df5b928",
809 | "name": "Default Suite",
810 | "persistSession": false,
811 | "parallel": false,
812 | "timeout": 300,
813 | "tests": []
814 | }],
815 | "urls": ["https://digital.fidelity.com/ftgw/digital/trade-equity/index/orderEntry"],
816 | "plugins": []
817 | }
--------------------------------------------------------------------------------
/src/Selenium_IDE/Merrill_Auto.side:
--------------------------------------------------------------------------------
1 | {
2 | "id": "50359473-da1c-4d38-a88f-f19894412df3",
3 | "version": "2.0",
4 | "name": "Merrill Lynch",
5 | "url": "https://olui2.fs.ml.com",
6 | "tests": [{
7 | "id": "f5052143-1096-43df-9348-77756d35ce51",
8 | "name": "| Login Merrill Edge",
9 | "commands": [{
10 | "id": "06844a9e-ccc4-4aaf-b22c-f7a0c48738cb",
11 | "comment": "",
12 | "command": "open",
13 | "target": "https://olui2.fs.ml.com/login/signin.aspx?sgt=3",
14 | "targets": [],
15 | "value": ""
16 | }, {
17 | "id": "3f4a83a7-d9c1-4ab7-be05-29db93bc9880",
18 | "comment": "",
19 | "command": "store",
20 | "target": "LOGIN:HERE",
21 | "targets": [],
22 | "value": "MERRILL_LOGIN"
23 | }, {
24 | "id": "081b7e85-5ee5-4fea-aa38-436ac0fcaf7b",
25 | "comment": "",
26 | "command": "if",
27 | "target": "${MERRILL_LOGIN} != \"LOGIN:HERE\"",
28 | "targets": [],
29 | "value": ""
30 | }, {
31 | "id": "548274e2-0661-4d2d-a4ef-41fc72a57791",
32 | "comment": "",
33 | "command": "executeScript",
34 | "target": "var LOGIN = ${MERRILL_LOGIN}; var colonIndex = LOGIN.indexOf(':'); return [ LOGIN.substring(0, colonIndex), LOGIN.substring(colonIndex + 1) ];",
35 | "targets": [],
36 | "value": "LOGIN"
37 | }, {
38 | "id": "75a7478d-c4a7-49f3-9f17-aea42469cfb3",
39 | "comment": "",
40 | "command": "echo",
41 | "target": "It is not reccomended to use this method to automate a login. Proceed at your own risk.",
42 | "targets": [],
43 | "value": ""
44 | }, {
45 | "id": "77c6365b-f3b4-4a6e-a003-12c527d2301b",
46 | "comment": "",
47 | "command": "click",
48 | "target": "id=oid",
49 | "targets": [
50 | ["id=oid", "id"],
51 | ["name=oid", "name"],
52 | ["css=#oid", "css:finder"],
53 | ["xpath=//input[@id='oid']", "xpath:attributes"],
54 | ["xpath=//section[@id='sign-in-main-content']/div/div/div/div/div/input", "xpath:idRelative"],
55 | ["xpath=//div/div/input", "xpath:position"]
56 | ],
57 | "value": ""
58 | }, {
59 | "id": "47b63be7-c7b4-48c4-98ba-d022b9cc8a22",
60 | "comment": "",
61 | "command": "type",
62 | "target": "id=oid",
63 | "targets": [
64 | ["id=oid", "id"],
65 | ["name=oid", "name"],
66 | ["css=#oid", "css:finder"],
67 | ["xpath=//input[@id='oid']", "xpath:attributes"],
68 | ["xpath=//section[@id='sign-in-main-content']/div/div/div/div/div/input", "xpath:idRelative"],
69 | ["xpath=//div/div/input", "xpath:position"]
70 | ],
71 | "value": "${LOGIN[0]}"
72 | }, {
73 | "id": "bb593432-d328-4d14-8ce6-d81eb2a59ad5",
74 | "comment": "",
75 | "command": "click",
76 | "target": "id=pass",
77 | "targets": [
78 | ["id=pass", "id"],
79 | ["name=pass", "name"],
80 | ["css=#pass", "css:finder"],
81 | ["xpath=//input[@id='pass']", "xpath:attributes"],
82 | ["xpath=//section[@id='sign-in-main-content']/div/div[2]/div/div/div/input", "xpath:idRelative"],
83 | ["xpath=//div[2]/div/div/div/input", "xpath:position"]
84 | ],
85 | "value": ""
86 | }, {
87 | "id": "94b15a23-a97f-444e-b14e-e0165604398e",
88 | "comment": "",
89 | "command": "type",
90 | "target": "id=pass",
91 | "targets": [
92 | ["id=pass", "id"],
93 | ["name=pass", "name"],
94 | ["css=#pass", "css:finder"],
95 | ["xpath=//input[@id='pass']", "xpath:attributes"],
96 | ["xpath=//section[@id='sign-in-main-content']/div/div[2]/div/div/div/input", "xpath:idRelative"],
97 | ["xpath=//div[2]/div/div/div/input", "xpath:position"]
98 | ],
99 | "value": "${LOGIN[1]}"
100 | }, {
101 | "id": "b4806763-133b-48fa-86ae-d967d91797e6",
102 | "comment": "",
103 | "command": "click",
104 | "target": "id=secure-signin-submit",
105 | "targets": [
106 | ["id=secure-signin-submit", "id"],
107 | ["linkText=Log in", "linkText"],
108 | ["css=#secure-signin-submit", "css:finder"],
109 | ["xpath=//a[contains(text(),'Log in')]", "xpath:link"],
110 | ["xpath=//a[@id='secure-signin-submit']", "xpath:attributes"],
111 | ["xpath=//div[@id='caw-signin']/a", "xpath:idRelative"],
112 | ["xpath=(//a[contains(@href, 'javascript:void(0);')])[4]", "xpath:href"],
113 | ["xpath=//section/div/div/a", "xpath:position"]
114 | ],
115 | "value": ""
116 | }, {
117 | "id": "cc571bf3-cc61-45d7-a246-4915bfb18df9",
118 | "comment": "",
119 | "command": "mouseOver",
120 | "target": "xpath=//div[3]/div/span/div/div[2]/a",
121 | "targets": [
122 | ["id=me_cs_lo_oth_529_001_020123", "id"],
123 | ["name=me_cs_lo_oth_529_001_020123", "name"],
124 | ["css=#me_cs_lo_oth_529_001_020123", "css:finder"],
125 | ["xpath=//a[@id='me_cs_lo_oth_529_001_020123']", "xpath:attributes"],
126 | ["xpath=//div[@id='ContentPH01']/a", "xpath:idRelative"],
127 | ["xpath=//div[3]/div/span/div/div[2]/a", "xpath:position"]
128 | ],
129 | "value": ""
130 | }, {
131 | "id": "23a34551-84da-4d4d-8403-9d7c562923d1",
132 | "comment": "",
133 | "command": "mouseOut",
134 | "target": "id=me_cs_lo_oth_529_001_020123",
135 | "targets": [
136 | ["id=me_cs_lo_oth_529_001_020123", "id"],
137 | ["name=me_cs_lo_oth_529_001_020123", "name"],
138 | ["css=#me_cs_lo_oth_529_001_020123", "css:finder"],
139 | ["xpath=//a[@id='me_cs_lo_oth_529_001_020123']", "xpath:attributes"],
140 | ["xpath=//div[@id='ContentPH01']/a", "xpath:idRelative"],
141 | ["xpath=//div[3]/div/span/div/div[2]/a", "xpath:position"]
142 | ],
143 | "value": ""
144 | }, {
145 | "id": "d78c5455-4a58-4c4e-a437-82ac0cab5955",
146 | "comment": "",
147 | "command": "end",
148 | "target": "",
149 | "targets": [],
150 | "value": ""
151 | }]
152 | }, {
153 | "id": "abeb29df-f535-4ffd-815a-1b73fdc45d16",
154 | "name": "- Sell Merrill Edge",
155 | "commands": [{
156 | "id": "edc50185-b08e-4814-8299-4b98a1cfd2c2",
157 | "comment": "",
158 | "command": "store",
159 | "target": "TICKERHERE",
160 | "targets": [],
161 | "value": "TICKER"
162 | }, {
163 | "id": "7b7eb3a6-0155-4205-9b10-78f5e14e07cc",
164 | "comment": "",
165 | "command": "store",
166 | "target": "1",
167 | "targets": [],
168 | "value": "dynamic"
169 | }, {
170 | "id": "b99c300c-2f96-4a9a-ac45-c8e71c5bfe8f",
171 | "comment": "",
172 | "command": "store",
173 | "target": "1",
174 | "targets": [],
175 | "value": "QUANTITY"
176 | }, {
177 | "id": "f52795f8-b859-4ebc-927f-43b691e5245f",
178 | "comment": "",
179 | "command": "executeScript",
180 | "target": "return \"-1\"",
181 | "targets": [],
182 | "value": "target"
183 | }, {
184 | "id": "ca063ef4-3d2a-4269-9bbb-ef422d80af81",
185 | "comment": "",
186 | "command": "if",
187 | "target": "${dynamic} == 0",
188 | "targets": [],
189 | "value": ""
190 | }, {
191 | "id": "df8d591c-f63e-4e4f-9aa3-d7ed1d75a0e1",
192 | "comment": "",
193 | "command": "executeScript",
194 | "target": "return Array.from({length: 50}, (_, i) => i + 1);",
195 | "targets": [],
196 | "value": "accounts"
197 | }, {
198 | "id": "0ba3e63e-53fe-434b-91c8-c8146a202b40",
199 | "comment": "",
200 | "command": "elseIf",
201 | "target": "${dynamic} == 1",
202 | "targets": [],
203 | "value": ""
204 | }, {
205 | "id": "8e5a48b3-85e2-43fa-a34b-2618b5c0dc30",
206 | "comment": "",
207 | "command": "open",
208 | "target": "https://olui2.fs.ml.com/TFPSummary/PortfolioSimpleView.aspx",
209 | "targets": [],
210 | "value": ""
211 | }, {
212 | "id": "34731fef-9d1f-48d8-ab9d-dc1611a79891",
213 | "comment": "",
214 | "command": "executeScript",
215 | "target": "const optionElements = document.querySelectorAll('.nwal__account-item-info'); return optionElements.length -1;",
216 | "targets": [],
217 | "value": "len_accounts"
218 | }, {
219 | "id": "0696c68e-c388-47f4-97e4-e892bd58566b",
220 | "comment": "",
221 | "command": "executeScript",
222 | "target": "return Array.from({length: ${len_accounts}}, (_, i) => i + 1);",
223 | "targets": [],
224 | "value": "accounts"
225 | }, {
226 | "id": "c48aa6dd-5436-475b-9305-caf9297bf3df",
227 | "comment": "",
228 | "command": "end",
229 | "target": "",
230 | "targets": [],
231 | "value": ""
232 | }, {
233 | "id": "d6f845c7-fe9e-49cf-8e15-dc35471a2e01",
234 | "comment": "",
235 | "command": "executeScript",
236 | "target": "return ${accounts}.slice(${accounts}.indexOf(${target}) + 1);",
237 | "targets": [],
238 | "value": "list"
239 | }, {
240 | "id": "623d0c31-c4ac-47b3-abd8-6b770324d596",
241 | "comment": "",
242 | "command": "executeScript",
243 | "target": "return 0;",
244 | "targets": [],
245 | "value": "count"
246 | }, {
247 | "id": "9b04dfeb-83ed-456b-b6c0-65dd36180f0d",
248 | "comment": "",
249 | "command": "executeScript",
250 | "target": "return ${TICKER}.split(\",\");",
251 | "targets": [],
252 | "value": "TICKERS"
253 | }, {
254 | "id": "3a63b83e-108c-4d71-839c-2376db962aed",
255 | "comment": "",
256 | "command": "forEach",
257 | "target": "list",
258 | "targets": [],
259 | "value": "account"
260 | }, {
261 | "id": "e5235dee-3e04-41bd-b247-2e7bfd9f664e",
262 | "comment": "",
263 | "command": "forEach",
264 | "target": "TICKERS",
265 | "targets": [],
266 | "value": "TICK"
267 | }, {
268 | "id": "b9d96e21-415a-451c-b6ad-e915e7eada4e",
269 | "comment": "",
270 | "command": "open",
271 | "target": "https://olui2.fs.ml.com/Equities/OrderEntry.aspx?as_cd=1.1.1.${account}",
272 | "targets": [],
273 | "value": ""
274 | }, {
275 | "id": "b5349b9b-b4b8-4168-a18b-0c68959a90f8",
276 | "comment": "",
277 | "command": "waitForElementPresent",
278 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType",
279 | "targets": [],
280 | "value": "30000"
281 | }, {
282 | "id": "c47c5c83-f31b-4148-94eb-2b0027deb90c",
283 | "comment": "",
284 | "command": "click",
285 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType",
286 | "targets": [
287 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType", "id"],
288 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$ddlOrderType", "name"],
289 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType", "css:finder"],
290 | ["xpath=//select[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType']", "xpath:attributes"],
291 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trSecondSection']/div/select", "xpath:idRelative"],
292 | ["xpath=//select", "xpath:position"]
293 | ],
294 | "value": ""
295 | }, {
296 | "id": "0c4d6430-dbed-465c-9f92-a9bef6e3c3b5",
297 | "comment": "",
298 | "command": "select",
299 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType",
300 | "targets": [],
301 | "value": "label=Sell"
302 | }, {
303 | "id": "2c93c939-8da3-44a1-9014-4ed9ddce2fc2",
304 | "comment": "",
305 | "command": "waitForElementEditable",
306 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
307 | "targets": [],
308 | "value": "30000"
309 | }, {
310 | "id": "c034afb7-d686-40a4-8df6-e68406846b54",
311 | "comment": "",
312 | "command": "click",
313 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
314 | "targets": [
315 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "id"],
316 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtSymbol", "name"],
317 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "css:finder"],
318 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol']", "xpath:attributes"],
319 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trSecondSection']/div[2]/input", "xpath:idRelative"],
320 | ["xpath=//div[2]/div[2]/input", "xpath:position"]
321 | ],
322 | "value": ""
323 | }, {
324 | "id": "83f701e2-5cc0-4d32-bbc2-f9a301633ee5",
325 | "comment": "",
326 | "command": "type",
327 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
328 | "targets": [
329 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "id"],
330 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtSymbol", "name"],
331 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "css:finder"],
332 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol']", "xpath:attributes"],
333 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trSecondSection']/div[2]/input", "xpath:idRelative"],
334 | ["xpath=//div[2]/div[2]/input", "xpath:position"]
335 | ],
336 | "value": "${TICK}"
337 | }, {
338 | "id": "e4767833-1389-42cb-8a8b-304f54577d29",
339 | "comment": "",
340 | "command": "type",
341 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
342 | "targets": [
343 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "id"],
344 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtSymbol", "name"],
345 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "css:finder"],
346 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol']", "xpath:attributes"],
347 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trSecondSection']/div[2]/input", "xpath:idRelative"],
348 | ["xpath=//div[2]/div[2]/input", "xpath:position"]
349 | ],
350 | "value": "${TICK}"
351 | }, {
352 | "id": "2233170d-7f72-49bb-9b85-aeb9e2b63660",
353 | "comment": "",
354 | "command": "sendKeys",
355 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
356 | "targets": [],
357 | "value": "${KEY_ENTER}"
358 | }, {
359 | "id": "4f567fd7-9d6b-4169-b8cd-26fbd835fa73",
360 | "comment": "",
361 | "command": "waitForElementEditable",
362 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity",
363 | "targets": [],
364 | "value": "30000"
365 | }, {
366 | "id": "61971ee3-072d-4e36-889f-40f7569d0c53",
367 | "comment": "",
368 | "command": "click",
369 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity",
370 | "targets": [
371 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity", "id"],
372 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtQuantity", "name"],
373 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity", "css:finder"],
374 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity']", "xpath:attributes"],
375 | ["xpath=//div[@id='SellAmtPanel']/div[2]/div/input", "xpath:idRelative"],
376 | ["xpath=//div[3]/div[2]/div/input", "xpath:position"]
377 | ],
378 | "value": ""
379 | }, {
380 | "id": "1c6d0b8a-9cc9-4087-8c15-97a19ec253e1",
381 | "comment": "",
382 | "command": "type",
383 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity",
384 | "targets": [
385 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity", "id"],
386 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtQuantity", "name"],
387 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity", "css:finder"],
388 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity']", "xpath:attributes"],
389 | ["xpath=//div[@id='SellAmtPanel']/div[2]/div/input", "xpath:idRelative"],
390 | ["xpath=//div[3]/div[2]/div/input", "xpath:position"]
391 | ],
392 | "value": "${QUANTITY}"
393 | }, {
394 | "id": "57c6711d-cea8-4f61-a5d3-1fc45ea97bf3",
395 | "comment": "",
396 | "command": "pause",
397 | "target": "750",
398 | "targets": [],
399 | "value": ""
400 | }, {
401 | "id": "bdd4780e-8d5a-42b8-8c97-dc7c5bb402c0",
402 | "comment": "",
403 | "command": "click",
404 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType",
405 | "targets": [
406 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType", "id"],
407 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$ddPriceType", "name"],
408 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType", "css:finder"],
409 | ["xpath=//select[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType']", "xpath:attributes"],
410 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trThirdSection']/div/select", "xpath:idRelative"],
411 | ["xpath=//div[3]/div/select", "xpath:position"]
412 | ],
413 | "value": ""
414 | }, {
415 | "id": "7c5f1eb7-5db7-40a7-80d1-1eee835fe6ee",
416 | "comment": "",
417 | "command": "select",
418 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType",
419 | "targets": [],
420 | "value": "label=Market"
421 | }, {
422 | "id": "0d2cd391-cc3f-4609-930a-556019ef06d1",
423 | "comment": "",
424 | "command": "click",
425 | "target": "xpath=//a[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_btnReviewOrder']/span",
426 | "targets": [
427 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_resxlblOrderPreviewText", "id"],
428 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_resxlblOrderPreviewText", "css:finder"],
429 | ["xpath=//span[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_resxlblOrderPreviewText']", "xpath:attributes"],
430 | ["xpath=//a[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_btnReviewOrder']/span", "xpath:idRelative"],
431 | ["xpath=//div[4]/div[2]/div[2]/div[2]/a/span", "xpath:position"]
432 | ],
433 | "value": ""
434 | }, {
435 | "id": "7310e92a-c055-41fa-a7cd-c2d5a99977d4",
436 | "comment": "",
437 | "command": "pause",
438 | "target": "750",
439 | "targets": [],
440 | "value": ""
441 | }, {
442 | "id": "1646de39-6ee6-4ee4-9334-a15c6388ce0b",
443 | "comment": "",
444 | "command": "executeScript",
445 | "target": "const xpath2 = '/html/body/form/div[10]/div[2]/div[2]/main/div/div[3]/div[3]/div[1]/div[3]/div/div[2]/div'; const element2 = document.evaluate(xpath2,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue; return (((element2 && (element2.textContent.includes(\"is not held in this account.\") || element2.textContent.includes(\"review your\")))));",
446 | "targets": [],
447 | "value": "noPos"
448 | }, {
449 | "id": "afbbc894-43e5-466b-a782-c8a69d0419b3",
450 | "comment": "",
451 | "command": "if",
452 | "target": "${noPos}",
453 | "targets": [],
454 | "value": ""
455 | }, {
456 | "id": "ae189c26-cbff-460a-a4eb-5b23429e52b0",
457 | "comment": "",
458 | "command": "echo",
459 | "target": "No position for ${TICK} on ${account}",
460 | "targets": [],
461 | "value": ""
462 | }, {
463 | "id": "72c96d28-da2c-429e-9b26-dd9ab5ad5911",
464 | "comment": "",
465 | "command": "else",
466 | "target": "",
467 | "targets": [],
468 | "value": ""
469 | }, {
470 | "id": "6c6cbb17-51db-4e5f-8459-2d7347b38853",
471 | "comment": "",
472 | "command": "click",
473 | "target": "xpath=//span[contains(.,'Submit Order')]",
474 | "targets": [
475 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_PilotPreviewConfirmPage_EquitiesResourceLabel2", "id"],
476 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_PilotPreviewConfirmPage_EquitiesResourceLabel2", "css:finder"],
477 | ["xpath=//span[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_PilotPreviewConfirmPage_EquitiesResourceLabel2']", "xpath:attributes"],
478 | ["xpath=//a[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_PilotPreviewConfirmPage_btnSubmit']/span", "xpath:idRelative"],
479 | ["xpath=//div[12]/a/span", "xpath:position"],
480 | ["xpath=//span[contains(.,'Submit Order')]", "xpath:innerText"]
481 | ],
482 | "value": ""
483 | }, {
484 | "id": "1a7b5e24-57de-46e4-820e-1dd00e0dba6b",
485 | "comment": "",
486 | "command": "echo",
487 | "target": "Sell ${TICK} on acct ${account} ran!",
488 | "targets": [],
489 | "value": ""
490 | }, {
491 | "id": "03b43bb7-2f9f-4a65-9ab0-3bfea940f8ac",
492 | "comment": "",
493 | "command": "end",
494 | "target": "",
495 | "targets": [],
496 | "value": ""
497 | }, {
498 | "id": "30caf639-cf31-4c69-9967-2ac872694b49",
499 | "comment": "",
500 | "command": "end",
501 | "target": "",
502 | "targets": [],
503 | "value": ""
504 | }, {
505 | "id": "b3bd5cda-7887-40b0-8f44-64b18026afd9",
506 | "comment": "",
507 | "command": "executeScript",
508 | "target": "return ${count} + 1;",
509 | "targets": [],
510 | "value": "count"
511 | }, {
512 | "id": "5a2a7dd4-7a3d-46b2-bec5-6b9660b3454e",
513 | "comment": "",
514 | "command": "executeScript",
515 | "target": "let percentage = (${count} / ${list}.length) * 100; return percentage.toFixed(1);",
516 | "targets": [],
517 | "value": "progress"
518 | }, {
519 | "id": "4d74eddf-6b51-495e-a3e0-be0bee1e7fad",
520 | "comment": "",
521 | "command": "echo",
522 | "target": "Counter Progress ${count}: (${progress}%)",
523 | "targets": [],
524 | "value": ""
525 | }, {
526 | "id": "a4a9a2e5-b295-4776-bb0c-05dfb5b8301c",
527 | "comment": "",
528 | "command": "end",
529 | "target": "",
530 | "targets": [],
531 | "value": ""
532 | }, {
533 | "id": "8bb9b638-addc-4dbd-a5f7-8ee04568fad6",
534 | "comment": "",
535 | "command": "open",
536 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
537 | "targets": [],
538 | "value": ""
539 | }, {
540 | "id": "4eae6b1d-f7e7-4686-b077-624e0a91dfaa",
541 | "comment": "",
542 | "command": "echo",
543 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
544 | "targets": [],
545 | "value": ""
546 | }]
547 | }, {
548 | "id": "7fa891f3-a2b2-41a2-b7c7-9455fc84b406",
549 | "name": "+ Buy Merrill Edge",
550 | "commands": [{
551 | "id": "4cfdd1e8-0442-43be-a6db-70dad509de0a",
552 | "comment": "",
553 | "command": "store",
554 | "target": "TICKERHERE",
555 | "targets": [],
556 | "value": "TICKER"
557 | }, {
558 | "id": "613ff68c-ca3e-4d44-99bf-e6c8fa83241e",
559 | "comment": "",
560 | "command": "store",
561 | "target": "1",
562 | "targets": [],
563 | "value": "dynamic"
564 | }, {
565 | "id": "941237bf-0e47-4642-bb3c-8586d456a3b5",
566 | "comment": "",
567 | "command": "store",
568 | "target": "1",
569 | "targets": [],
570 | "value": "QUANTITY"
571 | }, {
572 | "id": "24167be7-92be-47af-84c6-7267455f378e",
573 | "comment": "",
574 | "command": "executeScript",
575 | "target": "return \"-1\"",
576 | "targets": [],
577 | "value": "target"
578 | }, {
579 | "id": "3b90a29c-c142-49d6-92b9-6f93a396df26",
580 | "comment": "",
581 | "command": "if",
582 | "target": "${dynamic} == 0",
583 | "targets": [],
584 | "value": ""
585 | }, {
586 | "id": "3e9dfae0-50f4-468c-8619-f1828c348c16",
587 | "comment": "",
588 | "command": "executeScript",
589 | "target": "return Array.from({length: 50}, (_, i) => i + 1);",
590 | "targets": [],
591 | "value": "accounts"
592 | }, {
593 | "id": "ffce23f7-07cb-49fd-b7c7-7b593d66557f",
594 | "comment": "",
595 | "command": "elseIf",
596 | "target": "${dynamic} == 1",
597 | "targets": [],
598 | "value": ""
599 | }, {
600 | "id": "14facef4-85c3-471e-9c02-6f57fb89bf8e",
601 | "comment": "",
602 | "command": "open",
603 | "target": "https://olui2.fs.ml.com/TFPSummary/PortfolioSimpleView.aspx",
604 | "targets": [],
605 | "value": ""
606 | }, {
607 | "id": "047f6eb9-e8a8-4470-86a6-343e1d3117b6",
608 | "comment": "",
609 | "command": "executeScript",
610 | "target": "const optionElements = document.querySelectorAll('.nwal__account-item-info'); return optionElements.length -1;",
611 | "targets": [],
612 | "value": "len_accounts"
613 | }, {
614 | "id": "8d14deb5-fb32-4f6c-b6e0-ea4f544e8301",
615 | "comment": "",
616 | "command": "executeScript",
617 | "target": "return Array.from({length: ${len_accounts}}, (_, i) => i + 1);",
618 | "targets": [],
619 | "value": "accounts"
620 | }, {
621 | "id": "b75c31c9-45a0-4364-83cb-03605f0e8500",
622 | "comment": "",
623 | "command": "end",
624 | "target": "",
625 | "targets": [],
626 | "value": ""
627 | }, {
628 | "id": "15801d9f-86f3-4c75-a828-91528e45904c",
629 | "comment": "",
630 | "command": "executeScript",
631 | "target": "return ${accounts}.slice(${accounts}.indexOf(${target}) + 1);",
632 | "targets": [],
633 | "value": "list"
634 | }, {
635 | "id": "5254f316-d823-4577-b35b-5862454074d5",
636 | "comment": "",
637 | "command": "executeScript",
638 | "target": "return 0;",
639 | "targets": [],
640 | "value": "count"
641 | }, {
642 | "id": "d7df3ac9-fbd1-43a6-8e18-03d9504f3c0d",
643 | "comment": "",
644 | "command": "executeScript",
645 | "target": "return ${TICKER}.split(\",\");",
646 | "targets": [],
647 | "value": "TICKERS"
648 | }, {
649 | "id": "5a28f883-1e5a-43fa-bd77-ca47f293d8cb",
650 | "comment": "",
651 | "command": "forEach",
652 | "target": "list",
653 | "targets": [],
654 | "value": "account"
655 | }, {
656 | "id": "f158e1e8-b03a-4aeb-9d81-e529da96fc49",
657 | "comment": "",
658 | "command": "forEach",
659 | "target": "TICKERS",
660 | "targets": [],
661 | "value": "TICK"
662 | }, {
663 | "id": "aae8c119-bd63-43d9-9f4b-5fdf98e797f8",
664 | "comment": "",
665 | "command": "open",
666 | "target": "https://olui2.fs.ml.com/Equities/OrderEntry.aspx?as_cd=1.1.1.${account}",
667 | "targets": [],
668 | "value": ""
669 | }, {
670 | "id": "04b5893b-3f05-4d7f-afdf-4f7f199ad895",
671 | "comment": "",
672 | "command": "waitForElementPresent",
673 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType",
674 | "targets": [],
675 | "value": "30000"
676 | }, {
677 | "id": "3380d0d8-3b1a-4c8e-aa8c-5ed8489e37f9",
678 | "comment": "",
679 | "command": "click",
680 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType",
681 | "targets": [
682 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType", "id"],
683 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$ddlOrderType", "name"],
684 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType", "css:finder"],
685 | ["xpath=//select[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType']", "xpath:attributes"],
686 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trSecondSection']/div/select", "xpath:idRelative"],
687 | ["xpath=//select", "xpath:position"]
688 | ],
689 | "value": ""
690 | }, {
691 | "id": "3730e554-c629-4236-ae70-115750d2296b",
692 | "comment": "",
693 | "command": "select",
694 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddlOrderType",
695 | "targets": [],
696 | "value": "label=Buy"
697 | }, {
698 | "id": "d94f9007-8740-430f-aa6b-6dd75b239130",
699 | "comment": "",
700 | "command": "waitForElementEditable",
701 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
702 | "targets": [],
703 | "value": "30000"
704 | }, {
705 | "id": "a56d201f-f2b9-4c02-96b5-076ddbdb3bcc",
706 | "comment": "",
707 | "command": "click",
708 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
709 | "targets": [
710 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "id"],
711 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtSymbol", "name"],
712 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "css:finder"],
713 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol']", "xpath:attributes"],
714 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trSecondSection']/div[2]/input", "xpath:idRelative"],
715 | ["xpath=//div[2]/div[2]/input", "xpath:position"]
716 | ],
717 | "value": ""
718 | }, {
719 | "id": "ebcfddc2-0312-4deb-b74e-5413105e1bc6",
720 | "comment": "",
721 | "command": "type",
722 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
723 | "targets": [
724 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "id"],
725 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtSymbol", "name"],
726 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "css:finder"],
727 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol']", "xpath:attributes"],
728 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trSecondSection']/div[2]/input", "xpath:idRelative"],
729 | ["xpath=//div[2]/div[2]/input", "xpath:position"]
730 | ],
731 | "value": "${TICK}"
732 | }, {
733 | "id": "530391ab-e258-473b-a653-a3ea32f7db08",
734 | "comment": "",
735 | "command": "type",
736 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
737 | "targets": [
738 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "id"],
739 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtSymbol", "name"],
740 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol", "css:finder"],
741 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol']", "xpath:attributes"],
742 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trSecondSection']/div[2]/input", "xpath:idRelative"],
743 | ["xpath=//div[2]/div[2]/input", "xpath:position"]
744 | ],
745 | "value": "${TICK}"
746 | }, {
747 | "id": "d8fc6592-4773-4d89-84a1-62c29ec10e2c",
748 | "comment": "",
749 | "command": "sendKeys",
750 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtSymbol",
751 | "targets": [],
752 | "value": "${KEY_ENTER}"
753 | }, {
754 | "id": "1365f49e-e64c-4017-ba12-5b7c973277fa",
755 | "comment": "",
756 | "command": "waitForElementEditable",
757 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity",
758 | "targets": [],
759 | "value": "30000"
760 | }, {
761 | "id": "d206ce64-eea7-41fa-9429-ed863509638f",
762 | "comment": "",
763 | "command": "click",
764 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity",
765 | "targets": [
766 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity", "id"],
767 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtQuantity", "name"],
768 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity", "css:finder"],
769 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity']", "xpath:attributes"],
770 | ["xpath=//div[@id='SellAmtPanel']/div[2]/div/input", "xpath:idRelative"],
771 | ["xpath=//div[3]/div[2]/div/input", "xpath:position"]
772 | ],
773 | "value": ""
774 | }, {
775 | "id": "ea6a1473-27f0-46e6-9883-58795025c961",
776 | "comment": "",
777 | "command": "type",
778 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity",
779 | "targets": [
780 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity", "id"],
781 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$txtQuantity", "name"],
782 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity", "css:finder"],
783 | ["xpath=//input[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_txtQuantity']", "xpath:attributes"],
784 | ["xpath=//div[@id='SellAmtPanel']/div[2]/div/input", "xpath:idRelative"],
785 | ["xpath=//div[3]/div[2]/div/input", "xpath:position"]
786 | ],
787 | "value": "${QUANTITY}"
788 | }, {
789 | "id": "912ae8cf-c4de-42d3-b886-31c1042ef5df",
790 | "comment": "",
791 | "command": "pause",
792 | "target": "750",
793 | "targets": [],
794 | "value": ""
795 | }, {
796 | "id": "75e2c59a-371a-4560-8ae6-74f83ae8a36b",
797 | "comment": "",
798 | "command": "click",
799 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType",
800 | "targets": [
801 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType", "id"],
802 | ["name=ctl00$ctl00$ctl01$cphSiteMst$cphNestedPage$cphStage$view1$ddPriceType", "name"],
803 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType", "css:finder"],
804 | ["xpath=//select[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType']", "xpath:attributes"],
805 | ["xpath=//div[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_trThirdSection']/div/select", "xpath:idRelative"],
806 | ["xpath=//div[3]/div/select", "xpath:position"]
807 | ],
808 | "value": ""
809 | }, {
810 | "id": "5897ecbb-ad3a-4402-84b1-fd91c52c0f69",
811 | "comment": "",
812 | "command": "select",
813 | "target": "id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_ddPriceType",
814 | "targets": [],
815 | "value": "label=Market"
816 | }, {
817 | "id": "ed062a3e-2f65-437e-b558-4450382fdf38",
818 | "comment": "",
819 | "command": "click",
820 | "target": "xpath=//a[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_btnReviewOrder']/span",
821 | "targets": [
822 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_resxlblOrderPreviewText", "id"],
823 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_resxlblOrderPreviewText", "css:finder"],
824 | ["xpath=//span[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_resxlblOrderPreviewText']", "xpath:attributes"],
825 | ["xpath=//a[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_btnReviewOrder']/span", "xpath:idRelative"],
826 | ["xpath=//div[4]/div[2]/div[2]/div[2]/a/span", "xpath:position"]
827 | ],
828 | "value": ""
829 | }, {
830 | "id": "ccd24e58-cdf9-4524-9299-af8e5e0b3ec0",
831 | "comment": "",
832 | "command": "click",
833 | "target": "xpath=//span[contains(.,'Submit Order')]",
834 | "targets": [
835 | ["id=ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_PilotPreviewConfirmPage_EquitiesResourceLabel2", "id"],
836 | ["css=#ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_PilotPreviewConfirmPage_EquitiesResourceLabel2", "css:finder"],
837 | ["xpath=//span[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_PilotPreviewConfirmPage_EquitiesResourceLabel2']", "xpath:attributes"],
838 | ["xpath=//a[@id='ctl00_ctl00_ctl01_cphSiteMst_cphNestedPage_cphStage_view1_PilotPreviewConfirmPage_btnSubmit']/span", "xpath:idRelative"],
839 | ["xpath=//div[12]/a/span", "xpath:position"],
840 | ["xpath=//span[contains(.,'Submit Order')]", "xpath:innerText"]
841 | ],
842 | "value": ""
843 | }, {
844 | "id": "26ad3c67-c5f2-4557-859b-a50d9be47a90",
845 | "comment": "",
846 | "command": "echo",
847 | "target": "Buy ${TICK} on acct ${account} ran!",
848 | "targets": [],
849 | "value": ""
850 | }, {
851 | "id": "80e0d839-ebdb-4891-b90f-8d4d8701ac48",
852 | "comment": "",
853 | "command": "end",
854 | "target": "",
855 | "targets": [],
856 | "value": ""
857 | }, {
858 | "id": "7e4a89de-9077-4ab6-9402-424d00b84066",
859 | "comment": "",
860 | "command": "executeScript",
861 | "target": "return ${count} + 1;",
862 | "targets": [],
863 | "value": "count"
864 | }, {
865 | "id": "3ad124fc-b72c-43a5-9846-998ba68cbdd4",
866 | "comment": "",
867 | "command": "executeScript",
868 | "target": "let percentage = (${count} / ${list}.length) * 100; return percentage.toFixed(1);",
869 | "targets": [],
870 | "value": "progress"
871 | }, {
872 | "id": "2d341ba5-163f-4cf8-bef4-f832588f411d",
873 | "comment": "",
874 | "command": "echo",
875 | "target": "Counter Progress ${count}: (${progress}%)",
876 | "targets": [],
877 | "value": ""
878 | }, {
879 | "id": "b0100f05-e7e4-4cca-8f30-07e5f0273b43",
880 | "comment": "",
881 | "command": "end",
882 | "target": "",
883 | "targets": [],
884 | "value": ""
885 | }, {
886 | "id": "12611b0e-2475-42d2-bb79-fa00c157a7d4",
887 | "comment": "",
888 | "command": "open",
889 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
890 | "targets": [],
891 | "value": ""
892 | }, {
893 | "id": "3f36e8d7-b6d1-44b2-9ff8-86268469e0a7",
894 | "comment": "",
895 | "command": "echo",
896 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
897 | "targets": [],
898 | "value": ""
899 | }]
900 | }],
901 | "suites": [{
902 | "id": "4ff56a1d-cd48-4efc-81d2-0a22ba307ee3",
903 | "name": "Default Suite",
904 | "persistSession": false,
905 | "parallel": false,
906 | "timeout": 300,
907 | "tests": []
908 | }],
909 | "urls": ["https://olui2.fs.ml.com/"],
910 | "plugins": []
911 | }
--------------------------------------------------------------------------------
/src/Selenium_IDE/Schwab_Auto.side:
--------------------------------------------------------------------------------
1 | {
2 | "id": "3754741b-c246-46fd-a4b9-61df42906362",
3 | "version": "2.0",
4 | "name": "Schwab Automated",
5 | "url": "https://client.schwab.com/app/trade/tom/#/trade",
6 | "tests": [{
7 | "id": "b9eea497-2592-4c70-bba1-36c1f66168c8",
8 | "name": "| Login Schwab",
9 | "commands": [{
10 | "id": "0fa645fa-5c44-4eef-b72f-6a3441c6bd9e",
11 | "comment": "",
12 | "command": "open",
13 | "target": "https://client.schwab.com/Login/SignOn/CustomerCenterLogin.aspx",
14 | "targets": [],
15 | "value": ""
16 | }, {
17 | "id": "71256ede-2764-4470-b37f-ea6b4e7cca01",
18 | "comment": "",
19 | "command": "store",
20 | "target": "LOGIN:HERE",
21 | "targets": [],
22 | "value": "SCHWAB_LOGIN"
23 | }, {
24 | "id": "186feb56-385a-4e83-bcbb-1386e6f90ad2",
25 | "comment": "",
26 | "command": "if",
27 | "target": "${SCHWAB_LOGIN} != \"LOGIN:HERE\"",
28 | "targets": [],
29 | "value": ""
30 | }, {
31 | "id": "b1af578a-9b98-48ea-9128-7d8e3e457864",
32 | "comment": "",
33 | "command": "executeScript",
34 | "target": "var LOGIN = ${SCHWAB_LOGIN}; var colonIndex = LOGIN.indexOf(':'); return [ LOGIN.substring(0, colonIndex), LOGIN.substring(colonIndex + 1) ];",
35 | "targets": [],
36 | "value": "LOGIN"
37 | }, {
38 | "id": "aca88a4a-352f-4e57-97f1-f6307002c44f",
39 | "comment": "",
40 | "command": "selectFrame",
41 | "target": "index=1",
42 | "targets": [
43 | ["index=1"]
44 | ],
45 | "value": ""
46 | }, {
47 | "id": "eca9bb34-6a55-44a3-aabf-9bf116cb2657",
48 | "comment": "",
49 | "command": "click",
50 | "target": "id=loginIdInput",
51 | "targets": [
52 | ["id=loginIdInput", "id"],
53 | ["css=#loginIdInput", "css:finder"],
54 | ["xpath=//input[@id='loginIdInput']", "xpath:attributes"],
55 | ["xpath=//div[@id='user-name']/div/div/input", "xpath:idRelative"],
56 | ["xpath=//input", "xpath:position"]
57 | ],
58 | "value": ""
59 | }, {
60 | "id": "2200ddb5-4a6d-462d-987a-5bec88dfa8af",
61 | "comment": "",
62 | "command": "type",
63 | "target": "id=loginIdInput",
64 | "targets": [
65 | ["id=loginIdInput", "id"],
66 | ["css=#loginIdInput", "css:finder"],
67 | ["xpath=//input[@id='loginIdInput']", "xpath:attributes"],
68 | ["xpath=//div[@id='user-name']/div/div/input", "xpath:idRelative"],
69 | ["xpath=//input", "xpath:position"]
70 | ],
71 | "value": "${LOGIN[0]}"
72 | }, {
73 | "id": "3f12c6bc-4f42-4783-bb56-53acf1fb2b4a",
74 | "comment": "",
75 | "command": "click",
76 | "target": "id=passwordInput",
77 | "targets": [
78 | ["id=passwordInput", "id"],
79 | ["css=#passwordInput", "css:finder"],
80 | ["xpath=//input[@id='passwordInput']", "xpath:attributes"],
81 | ["xpath=//div[@id='password']/div/input", "xpath:idRelative"],
82 | ["xpath=//div[4]/div/input", "xpath:position"]
83 | ],
84 | "value": ""
85 | }, {
86 | "id": "791b52c5-a165-43a3-a220-664c000c2eeb",
87 | "comment": "",
88 | "command": "type",
89 | "target": "id=passwordInput",
90 | "targets": [
91 | ["id=passwordInput", "id"],
92 | ["css=#passwordInput", "css:finder"],
93 | ["xpath=//input[@id='passwordInput']", "xpath:attributes"],
94 | ["xpath=//div[@id='password']/div/input", "xpath:idRelative"],
95 | ["xpath=//div[4]/div/input", "xpath:position"]
96 | ],
97 | "value": "${LOGIN[1]}"
98 | }, {
99 | "id": "6df08d35-c0dd-46d3-b3c6-7d38a5da4420",
100 | "comment": "",
101 | "command": "click",
102 | "target": "id=btnLogin",
103 | "targets": [
104 | ["id=btnLogin", "id"],
105 | ["css=#btnLogin", "css:finder"],
106 | ["xpath=//button[@id='btnLogin']", "xpath:attributes"],
107 | ["xpath=//div[@id='button-container']/button", "xpath:idRelative"],
108 | ["xpath=//button", "xpath:position"]
109 | ],
110 | "value": ""
111 | }, {
112 | "id": "0438c0af-6e9a-4707-b421-05fee2e0e374",
113 | "comment": "",
114 | "command": "end",
115 | "target": "",
116 | "targets": [],
117 | "value": ""
118 | }]
119 | }, {
120 | "id": "00fe9fca-2260-4ca5-beee-945eb08cc90c",
121 | "name": "+ Buy Schwab",
122 | "commands": [{
123 | "id": "431f11b5-635e-458b-8360-9531d5f5dbe5",
124 | "comment": "",
125 | "command": "store",
126 | "target": "TICKERHERE",
127 | "targets": [],
128 | "value": "TICKER"
129 | }, {
130 | "id": "6e8d053a-4fc4-4fdb-a70b-153dc04752be",
131 | "comment": "",
132 | "command": "open",
133 | "target": "https://client.schwab.com/app/trade/tom/#/trade",
134 | "targets": [],
135 | "value": ""
136 | }, {
137 | "id": "b6ca055f-d2c7-4f83-a187-43da6ecaa44e",
138 | "comment": "",
139 | "command": "executeScript",
140 | "target": "return Array.from({length: 30}, (_, i) => i);;",
141 | "targets": [],
142 | "value": "accounts"
143 | }, {
144 | "id": "4956efa5-c445-44f1-9771-90e6c188c228",
145 | "comment": "",
146 | "command": "executeScript",
147 | "target": "return -1",
148 | "targets": [],
149 | "value": "target"
150 | }, {
151 | "id": "c5dda49f-8168-4957-a5e4-f3be2a10ea2f",
152 | "comment": "",
153 | "command": "executeScript",
154 | "target": "let list = ${accounts}; list = list.slice(list.indexOf(${target}) + 1); return list;",
155 | "targets": [],
156 | "value": "numb"
157 | }, {
158 | "id": "838a87a1-c35a-4848-a32a-865cd10c740d",
159 | "comment": "",
160 | "command": "executeScript",
161 | "target": "return 1;",
162 | "targets": [],
163 | "value": "QUANT"
164 | }, {
165 | "id": "260a9e1a-a82b-4d45-98dc-b9ca0fcf4860",
166 | "comment": "",
167 | "command": "forEach",
168 | "target": "numb",
169 | "targets": [],
170 | "value": "account"
171 | }, {
172 | "id": "a213310b-9595-4c6d-aa72-2157bd1cad5a",
173 | "comment": "",
174 | "command": "verifyElementPresent",
175 | "target": "xpath=//sdps-account-selector/div/div/button",
176 | "targets": [
177 | ["id=basic-example-small", "id"],
178 | ["css=#basic-example-small", "css:finder"],
179 | ["xpath=//button[@id='basic-example-small']", "xpath:attributes"],
180 | ["xpath=//div[@id='basic-example-small-container']/button", "xpath:idRelative"],
181 | ["xpath=//sdps-account-selector/div/div/button", "xpath:position"]
182 | ],
183 | "value": ""
184 | }, {
185 | "id": "75cecab5-14cd-4b8a-b401-4175d8040b4a",
186 | "comment": "",
187 | "command": "click",
188 | "target": "css=.sdps-account-selector__icon",
189 | "targets": [
190 | ["css=.sdps-account-selector__icon", "css:finder"],
191 | ["xpath=//button[@id='basic-example-small']/span[5]", "xpath:idRelative"],
192 | ["xpath=//span[5]", "xpath:position"]
193 | ],
194 | "value": ""
195 | }, {
196 | "id": "db1c1e78-70f8-4eff-bb4e-3c7b9132be18",
197 | "comment": "",
198 | "command": "assertElementPresent",
199 | "target": "xpath=//*[@id=\"basic-example-small-header-0-account-${account}\"]",
200 | "targets": [],
201 | "value": ""
202 | }, {
203 | "id": "dc6ba57f-6ffd-45bd-a920-02ac0c11096b",
204 | "comment": "",
205 | "command": "click",
206 | "target": "xpath=//*[@id=\"basic-example-small-header-0-account-${account}\"]",
207 | "targets": [],
208 | "value": ""
209 | }, {
210 | "id": "cd349c6c-753e-4f1f-97db-03506bdb22d7",
211 | "comment": "",
212 | "command": "executeScript",
213 | "target": "return ${TICKER}.split(\",\");",
214 | "targets": [],
215 | "value": "TICKERS"
216 | }, {
217 | "id": "68c08b02-f9b0-458e-b8e4-5d4d24ef0aef",
218 | "comment": "",
219 | "command": "forEach",
220 | "target": "TICKERS",
221 | "targets": [],
222 | "value": "TICK"
223 | }, {
224 | "id": "55be14bb-5bb9-4d7d-9967-b2d0cb779af1",
225 | "comment": "",
226 | "command": "waitForElementEditable",
227 | "target": "id=_txtSymbol",
228 | "targets": [],
229 | "value": "45000"
230 | }, {
231 | "id": "a93bcd76-af3a-48da-8a44-f5c36e898eaf",
232 | "comment": "",
233 | "command": "type",
234 | "target": "id=_txtSymbol",
235 | "targets": [
236 | ["id=_txtSymbol", "id"],
237 | ["name=symbol", "name"],
238 | ["css=#\\_txtSymbol", "css:finder"],
239 | ["xpath=//input[@id='_txtSymbol']", "xpath:attributes"],
240 | ["xpath=//mc-trade-symbol[@id='mctsymbolaa9bf0b8']/div/div/div/input", "xpath:idRelative"],
241 | ["xpath=//mc-trade-symbol/div/div/div/input", "xpath:position"]
242 | ],
243 | "value": "${TICK}"
244 | }, {
245 | "id": "814e0938-d4fa-4baf-bfc0-56cdf65a1a25",
246 | "comment": "",
247 | "command": "pause",
248 | "target": "1050",
249 | "targets": [],
250 | "value": ""
251 | }, {
252 | "id": "82061be9-5e9c-4da2-b596-1ab444446951",
253 | "comment": "",
254 | "command": "sendKeys",
255 | "target": "id=_txtSymbol",
256 | "targets": [
257 | ["id=_txtSymbol", "id"],
258 | ["name=symbol", "name"],
259 | ["css=#\\_txtSymbol", "css:finder"],
260 | ["xpath=//input[@id='_txtSymbol']", "xpath:attributes"],
261 | ["xpath=//mc-trade-symbol[@id='mctsymbolaa9bf0b8']/div/div/div/input", "xpath:idRelative"],
262 | ["xpath=//mc-trade-symbol/div/div/div/input", "xpath:position"]
263 | ],
264 | "value": "${KEY_ENTER}"
265 | }, {
266 | "id": "7828d1af-9db0-4266-8a7c-954c4fc4a9e4",
267 | "comment": "",
268 | "command": "pause",
269 | "target": "1250",
270 | "targets": [],
271 | "value": ""
272 | }, {
273 | "id": "9e7c287a-4520-4717-ba5e-c2fe14024c18",
274 | "comment": "",
275 | "command": "click",
276 | "target": "id=_action",
277 | "targets": [
278 | ["id=_action", "id"],
279 | ["name=action", "name"],
280 | ["css=#\\_action", "css:finder"],
281 | ["xpath=//select[@id='_action']", "xpath:attributes"],
282 | ["xpath=//mc-trade-order-leg[@id='mctordleg424668ec']/div/div[2]/div/select", "xpath:idRelative"],
283 | ["xpath=//mc-trade-order-leg/div/div[2]/div/select", "xpath:position"]
284 | ],
285 | "value": ""
286 | }, {
287 | "id": "2d6028c5-f8c0-4856-994e-8abac930a5e9",
288 | "comment": "",
289 | "command": "select",
290 | "target": "id=_action",
291 | "targets": [],
292 | "value": "label=Buy"
293 | }, {
294 | "id": "ab706b3b-e39e-4367-81e9-e27612508ad0",
295 | "comment": "",
296 | "command": "if",
297 | "target": "${QUANT} != 1",
298 | "targets": [],
299 | "value": ""
300 | }, {
301 | "id": "56d4ffa3-d29c-48c3-bdef-4d165d6154c1",
302 | "comment": "",
303 | "command": "executeScript",
304 | "target": "var inputElement = document.getElementById(\"ordernumber01inputqty-stepper-input\"); inputElement.value = ${QUANT} - 1; var incrementButton = document.querySelector('.sdps-button--input-right-inset'); incrementButton.click();",
305 | "targets": [],
306 | "value": ""
307 | }, {
308 | "id": "6fc4462e-641e-40bd-80b2-1a51a1667fe3",
309 | "comment": "",
310 | "command": "end",
311 | "target": "",
312 | "targets": [],
313 | "value": ""
314 | }, {
315 | "id": "91ec5382-16e5-4331-bd14-18f8e163648e",
316 | "comment": "",
317 | "command": "click",
318 | "target": "css=.mtt-dropdown__select",
319 | "targets": [
320 | ["css=.mtt-dropdown__select", "css:finder"],
321 | ["xpath=//div[@id='mcaio-orderType-container']/div/div/div/select", "xpath:idRelative"],
322 | ["xpath=//div[5]/div/div/div/select", "xpath:position"]
323 | ],
324 | "value": ""
325 | }, {
326 | "id": "3e8fe5e2-59e0-46e9-9bcc-e690b6d784cb",
327 | "comment": "",
328 | "command": "select",
329 | "target": "css=.mtt-dropdown__select",
330 | "targets": [
331 | ["css=.mtt-dropdown__select", "css:finder"],
332 | ["xpath=//div[@id='mcaio-orderType-container']/div/div/div/select", "xpath:idRelative"],
333 | ["xpath=//div[5]/div/div/div/select", "xpath:position"]
334 | ],
335 | "value": "label=Market"
336 | }, {
337 | "id": "02d4999e-b847-4329-9681-8cc24219eb5f",
338 | "comment": "",
339 | "command": "click",
340 | "target": "css=.mcaio-order--reviewbtn",
341 | "targets": [
342 | ["css=.mcaio-order--reviewbtn", "css:finder"],
343 | ["xpath=(//button[@type='button'])[39]", "xpath:attributes"],
344 | ["xpath=//div[@id='mcaio-footer']/div/div[2]/button[2]", "xpath:idRelative"],
345 | ["xpath=//div[4]/div/div[2]/button[2]", "xpath:position"],
346 | ["xpath=//button[contains(.,'Review Order')]", "xpath:innerText"]
347 | ],
348 | "value": ""
349 | }, {
350 | "id": "766ed655-343c-4d67-9253-0914dbcfb990",
351 | "comment": "",
352 | "command": "pause",
353 | "target": "6500",
354 | "targets": [],
355 | "value": ""
356 | }, {
357 | "id": "5f05ff0a-2616-4ad6-b07a-1d5d629a67c9",
358 | "comment": "",
359 | "command": "click",
360 | "target": "id=mtt-place-button",
361 | "targets": [
362 | ["id=mtt-place-button", "id"],
363 | ["css=#mtt-place-button", "css:finder"],
364 | ["xpath=//button[@id='mtt-place-button']", "xpath:attributes"],
365 | ["xpath=//div[@id='mcaio-footer']/div/div/button[3]", "xpath:idRelative"],
366 | ["xpath=//button[3]", "xpath:position"]
367 | ],
368 | "value": ""
369 | }, {
370 | "id": "a1f5af57-4c78-4cf0-a9dc-6463b3d51057",
371 | "comment": "",
372 | "command": "click",
373 | "target": "css=.mcaio--mcaio-cta-buttons-anothertrade",
374 | "targets": [
375 | ["css=.mcaio--mcaio-cta-buttons-anothertrade", "css:finder"],
376 | ["xpath=//button[@onclick='mcttrade62f278b1.handlePlaceAnother()']", "xpath:attributes"],
377 | ["xpath=//div[@id='mcaio-footer']/div/div/button[3]", "xpath:idRelative"],
378 | ["xpath=//button[3]", "xpath:position"],
379 | ["xpath=//button[contains(.,'Place Another Order')]", "xpath:innerText"]
380 | ],
381 | "value": ""
382 | }, {
383 | "id": "886b65cc-c82c-4e20-8325-e26183aafe30",
384 | "comment": "",
385 | "command": "echo",
386 | "target": "${account} Buying ${TICK} Test Successful!",
387 | "targets": [],
388 | "value": ""
389 | }, {
390 | "id": "b9ff0bd1-33df-4051-8597-88ddd548b60e",
391 | "comment": "",
392 | "command": "end",
393 | "target": "",
394 | "targets": [],
395 | "value": ""
396 | }, {
397 | "id": "b3e5927c-02b5-42e6-a8eb-e080169a914c",
398 | "comment": "",
399 | "command": "end",
400 | "target": "",
401 | "targets": [],
402 | "value": ""
403 | }, {
404 | "id": "98c9f9af-072d-4da2-90e8-4171e51e18d3",
405 | "comment": "",
406 | "command": "open",
407 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
408 | "targets": [],
409 | "value": ""
410 | }, {
411 | "id": "693838ed-b703-47b2-b65b-81c3792b8376",
412 | "comment": "",
413 | "command": "echo",
414 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
415 | "targets": [],
416 | "value": ""
417 | }]
418 | }, {
419 | "id": "a76629fc-6faf-44c5-a5d0-9fe8941ce312",
420 | "name": "- Schwab Sell",
421 | "commands": [{
422 | "id": "2d7949a3-7a85-49d4-8cf4-55796866d0e1",
423 | "comment": "",
424 | "command": "store",
425 | "target": "TICKERHERE",
426 | "targets": [],
427 | "value": "TICKER"
428 | }, {
429 | "id": "6995d2d3-06a5-4754-a099-ccb1c4cb2356",
430 | "comment": "",
431 | "command": "open",
432 | "target": "https://client.schwab.com/app/trade/tom/#/trade",
433 | "targets": [],
434 | "value": ""
435 | }, {
436 | "id": "faea0380-ed7c-4300-b2e5-cdf12cd367a4",
437 | "comment": "",
438 | "command": "executeScript",
439 | "target": "return Array.from({length: 30}, (_, i) => i);;",
440 | "targets": [],
441 | "value": "accounts"
442 | }, {
443 | "id": "34f12301-3a58-47c9-be7b-3a4520b42585",
444 | "comment": "",
445 | "command": "executeScript",
446 | "target": "return -1",
447 | "targets": [],
448 | "value": "target"
449 | }, {
450 | "id": "00a04993-7948-4972-b01c-3ba0ff92e23d",
451 | "comment": "",
452 | "command": "executeScript",
453 | "target": "return 1;",
454 | "targets": [],
455 | "value": "QUANT"
456 | }, {
457 | "id": "d431321c-5e85-4371-8b89-01baa639b6a4",
458 | "comment": "",
459 | "command": "executeScript",
460 | "target": "let list = ${accounts}; list = list.slice(list.indexOf(${target}) + 1); return list;",
461 | "targets": [],
462 | "value": "numb"
463 | }, {
464 | "id": "2dd9872c-5598-4661-b721-ce97f7e6b08c",
465 | "comment": "",
466 | "command": "executeScript",
467 | "target": "return ${TICKER}.split(\",\");",
468 | "targets": [],
469 | "value": "TICKERS"
470 | }, {
471 | "id": "b6c4f34e-6c59-44b6-8beb-9c9e1743e38d",
472 | "comment": "",
473 | "command": "forEach",
474 | "target": "numb",
475 | "targets": [],
476 | "value": "account"
477 | }, {
478 | "id": "67bb05d0-27bd-43c3-853d-1dfa19681c9e",
479 | "comment": "",
480 | "command": "verifyElementPresent",
481 | "target": "xpath=//sdps-account-selector/div/div/button",
482 | "targets": [
483 | ["id=basic-example-small", "id"],
484 | ["css=#basic-example-small", "css:finder"],
485 | ["xpath=//button[@id='basic-example-small']", "xpath:attributes"],
486 | ["xpath=//div[@id='basic-example-small-container']/button", "xpath:idRelative"],
487 | ["xpath=//sdps-account-selector/div/div/button", "xpath:position"]
488 | ],
489 | "value": ""
490 | }, {
491 | "id": "29024848-2d0f-4e8a-b663-aa9997f20d9e",
492 | "comment": "",
493 | "command": "click",
494 | "target": "css=.sdps-account-selector__icon",
495 | "targets": [
496 | ["css=.sdps-account-selector__icon", "css:finder"],
497 | ["xpath=//button[@id='basic-example-small']/span[5]", "xpath:idRelative"],
498 | ["xpath=//span[5]", "xpath:position"]
499 | ],
500 | "value": ""
501 | }, {
502 | "id": "cc8c5735-3f13-45cd-af5c-184c1a486cb1",
503 | "comment": "",
504 | "command": "assertElementPresent",
505 | "target": "xpath=//*[@id=\"basic-example-small-header-0-account-${account}\"]",
506 | "targets": [],
507 | "value": ""
508 | }, {
509 | "id": "3ca30f25-1b00-42d9-9f57-7e3122de504b",
510 | "comment": "",
511 | "command": "click",
512 | "target": "xpath=//*[@id=\"basic-example-small-header-0-account-${account}\"]",
513 | "targets": [],
514 | "value": ""
515 | }, {
516 | "id": "7c4a7f8a-0fa9-46f8-b2d9-19a26920d360",
517 | "comment": "",
518 | "command": "forEach",
519 | "target": "TICKERS",
520 | "targets": [],
521 | "value": "TICK"
522 | }, {
523 | "id": "7130fabe-77de-4699-9736-578bcb67c7b1",
524 | "comment": "",
525 | "command": "waitForElementEditable",
526 | "target": "id=_txtSymbol",
527 | "targets": [],
528 | "value": "30000"
529 | }, {
530 | "id": "0fc38531-f92e-4240-9159-ef8551a0e7dc",
531 | "comment": "",
532 | "command": "type",
533 | "target": "id=_txtSymbol",
534 | "targets": [
535 | ["id=_txtSymbol", "id"],
536 | ["name=symbol", "name"],
537 | ["css=#\\_txtSymbol", "css:finder"],
538 | ["xpath=//input[@id='_txtSymbol']", "xpath:attributes"],
539 | ["xpath=//mc-trade-symbol[@id='mctsymbolaa9bf0b8']/div/div/div/input", "xpath:idRelative"],
540 | ["xpath=//mc-trade-symbol/div/div/div/input", "xpath:position"]
541 | ],
542 | "value": "${TICK}"
543 | }, {
544 | "id": "4003d509-31f9-42af-a1e6-f21cf6b57f3c",
545 | "comment": "",
546 | "command": "pause",
547 | "target": "1000",
548 | "targets": [],
549 | "value": ""
550 | }, {
551 | "id": "6cc75c55-2f56-4b70-8752-6b97bb1269f8",
552 | "comment": "",
553 | "command": "sendKeys",
554 | "target": "id=_txtSymbol",
555 | "targets": [
556 | ["id=_txtSymbol", "id"],
557 | ["name=symbol", "name"],
558 | ["css=#\\_txtSymbol", "css:finder"],
559 | ["xpath=//input[@id='_txtSymbol']", "xpath:attributes"],
560 | ["xpath=//mc-trade-symbol[@id='mctsymbolaa9bf0b8']/div/div/div/input", "xpath:idRelative"],
561 | ["xpath=//mc-trade-symbol/div/div/div/input", "xpath:position"]
562 | ],
563 | "value": "${KEY_ENTER}"
564 | }, {
565 | "id": "248f299a-806b-4bb4-89fe-9c2b174e23ac",
566 | "comment": "",
567 | "command": "pause",
568 | "target": "1050",
569 | "targets": [],
570 | "value": ""
571 | }, {
572 | "id": "1a502f73-2cbe-495c-820e-6dd334161831",
573 | "comment": "",
574 | "command": "click",
575 | "target": "id=_action",
576 | "targets": [
577 | ["id=_action", "id"],
578 | ["name=action", "name"],
579 | ["css=#\\_action", "css:finder"],
580 | ["xpath=//select[@id='_action']", "xpath:attributes"],
581 | ["xpath=//mc-trade-order-leg[@id='mctordleg424668ec']/div/div[2]/div/select", "xpath:idRelative"],
582 | ["xpath=//mc-trade-order-leg/div/div[2]/div/select", "xpath:position"]
583 | ],
584 | "value": ""
585 | }, {
586 | "id": "db691730-c774-4d7f-bf70-5bbf2bc6b150",
587 | "comment": "",
588 | "command": "select",
589 | "target": "id=_action",
590 | "targets": [],
591 | "value": "label=Sell"
592 | }, {
593 | "id": "c2047331-6e50-4467-a9c5-246fca096703",
594 | "comment": "",
595 | "command": "click",
596 | "target": "css=.mtt-dropdown__select",
597 | "targets": [
598 | ["css=.mtt-dropdown__select", "css:finder"],
599 | ["xpath=//div[@id='mcaio-orderType-container']/div/div/div/select", "xpath:idRelative"],
600 | ["xpath=//div[5]/div/div/div/select", "xpath:position"]
601 | ],
602 | "value": ""
603 | }, {
604 | "id": "c97ee7f9-72eb-4009-af14-cdf8ff397962",
605 | "comment": "",
606 | "command": "select",
607 | "target": "css=.mtt-dropdown__select",
608 | "targets": [
609 | ["css=.mtt-dropdown__select", "css:finder"],
610 | ["xpath=//div[@id='mcaio-orderType-container']/div/div/div/select", "xpath:idRelative"],
611 | ["xpath=//div[5]/div/div/div/select", "xpath:position"]
612 | ],
613 | "value": "label=Market"
614 | }, {
615 | "id": "65e1b30d-fe6d-45d2-8aab-bb11b2199c88",
616 | "comment": "",
617 | "command": "if",
618 | "target": "${QUANT} != 1",
619 | "targets": [],
620 | "value": ""
621 | }, {
622 | "id": "9cf842b8-0a2c-4ba8-8da9-13027c784da9",
623 | "comment": "",
624 | "command": "executeScript",
625 | "target": "var element = document.querySelector('[aria-label=\"increment number\"]'); for (var i = 0; i < (${QUANT}- 1); i++) { element.click(); }",
626 | "targets": [],
627 | "value": ""
628 | }, {
629 | "id": "b13fe29e-60e8-4c15-b528-22e1eb11b174",
630 | "comment": "",
631 | "command": "end",
632 | "target": "",
633 | "targets": [],
634 | "value": ""
635 | }, {
636 | "id": "6ecd1f39-a0fa-41c4-bee4-15b990d9834b",
637 | "comment": "",
638 | "command": "click",
639 | "target": "css=.mcaio-order--reviewbtn",
640 | "targets": [
641 | ["css=.mcaio-order--reviewbtn", "css:finder"],
642 | ["xpath=(//button[@type='button'])[39]", "xpath:attributes"],
643 | ["xpath=//div[@id='mcaio-footer']/div/div[2]/button[2]", "xpath:idRelative"],
644 | ["xpath=//div[4]/div/div[2]/button[2]", "xpath:position"],
645 | ["xpath=//button[contains(.,'Review Order')]", "xpath:innerText"]
646 | ],
647 | "value": ""
648 | }, {
649 | "id": "95f8e12b-5b1a-4c2b-a100-dcd56b085e0b",
650 | "comment": "",
651 | "command": "pause",
652 | "target": "1650",
653 | "targets": [],
654 | "value": ""
655 | }, {
656 | "id": "f34996e3-3d12-4d1c-a44a-a4560ef251a3",
657 | "comment": "",
658 | "command": "executeScript",
659 | "target": "const xpath = '/html/body/div[1]/div[3]/div/div[2]/div[1]/div[4]/app-root/app-trade/mc-trade/div[2]/div[2]/div[1]/div[3]/div[1]/p[2]'; const element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; return (element && (element.textContent.includes('This security is not currently held in this account.') || element.textContent.includes('greater quantity of shares than you hold in this account')));",
660 | "targets": [],
661 | "value": "no_position"
662 | }, {
663 | "id": "7e0b8f60-dcdf-42d2-802f-69991a0b8f46",
664 | "comment": "",
665 | "command": "if",
666 | "target": "${no_position}",
667 | "targets": [],
668 | "value": ""
669 | }, {
670 | "id": "3499621c-0aec-499c-8325-b7dcdaf38903",
671 | "comment": "",
672 | "command": "echo",
673 | "target": "${account} either has no position with ${TICK} or the transaction would result in oversold shares.",
674 | "targets": [],
675 | "value": ""
676 | }, {
677 | "id": "4796660c-9be2-43db-9094-4aff1f3a72b0",
678 | "comment": "",
679 | "command": "click",
680 | "target": "css=.mcaio-cta-buttons > .col-full > .sdps-button--secondary",
681 | "targets": [
682 | ["css=.mcaio-cta-buttons > .col-full > .sdps-button--secondary", "css:finder"],
683 | ["xpath=(//button[@type='button'])[3]", "xpath:attributes"],
684 | ["xpath=//div[@id='page-container']/div[3]/div[2]/div/div/button", "xpath:idRelative"],
685 | ["xpath=//div[3]/div[2]/div/div/button", "xpath:position"],
686 | ["xpath=//button[contains(.,'Change Order')]", "xpath:innerText"]
687 | ],
688 | "value": ""
689 | }, {
690 | "id": "3719972a-cb58-40c3-8628-fb663634552d",
691 | "comment": "",
692 | "command": "else",
693 | "target": "",
694 | "targets": [],
695 | "value": ""
696 | }, {
697 | "id": "ce8480bc-c52c-47fc-9335-c0c8de06544f",
698 | "comment": "",
699 | "command": "click",
700 | "target": "id=mtt-place-button",
701 | "targets": [
702 | ["id=mtt-place-button", "id"],
703 | ["css=#mtt-place-button", "css:finder"],
704 | ["xpath=//button[@id='mtt-place-button']", "xpath:attributes"],
705 | ["xpath=//div[@id='mcaio-footer']/div/div/button[3]", "xpath:idRelative"],
706 | ["xpath=//button[3]", "xpath:position"]
707 | ],
708 | "value": ""
709 | }, {
710 | "id": "f26ec63f-2f7f-450a-9ddc-7ce99ac3e85b",
711 | "comment": "",
712 | "command": "click",
713 | "target": "css=.mcaio--mcaio-cta-buttons-anothertrade",
714 | "targets": [
715 | ["css=.mcaio--mcaio-cta-buttons-anothertrade", "css:finder"],
716 | ["xpath=//button[@onclick='mcttrade62f278b1.handlePlaceAnother()']", "xpath:attributes"],
717 | ["xpath=//div[@id='mcaio-footer']/div/div/button[3]", "xpath:idRelative"],
718 | ["xpath=//button[3]", "xpath:position"],
719 | ["xpath=//button[contains(.,'Place Another Order')]", "xpath:innerText"]
720 | ],
721 | "value": ""
722 | }, {
723 | "id": "ac022661-a730-43e4-8890-17ff69032309",
724 | "comment": "",
725 | "command": "echo",
726 | "target": "${account} Selling ${TICK} Test Successful!",
727 | "targets": [],
728 | "value": ""
729 | }, {
730 | "id": "f713cbc6-8918-475e-9739-b2b3e7424dc3",
731 | "comment": "",
732 | "command": "end",
733 | "target": "",
734 | "targets": [],
735 | "value": ""
736 | }, {
737 | "id": "e29493ac-3d07-4360-ac47-f8d06982f356",
738 | "comment": "",
739 | "command": "end",
740 | "target": "",
741 | "targets": [],
742 | "value": ""
743 | }, {
744 | "id": "04608758-c13f-4928-a576-cc8cca37a0ab",
745 | "comment": "",
746 | "command": "end",
747 | "target": "",
748 | "targets": [],
749 | "value": ""
750 | }, {
751 | "id": "bf649f76-4ead-468e-b000-76dc333901b3",
752 | "comment": "",
753 | "command": "open",
754 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
755 | "targets": [],
756 | "value": ""
757 | }, {
758 | "id": "57a05713-e8a7-4eb3-8626-045264bdedc8",
759 | "comment": "",
760 | "command": "echo",
761 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
762 | "targets": [],
763 | "value": ""
764 | }]
765 | }, {
766 | "id": "41be4d96-884b-4213-94db-b47b55cc8e79",
767 | "name": "X Limit Buy Schwab",
768 | "commands": [{
769 | "id": "23961c54-6cc6-499b-8151-7aa05c166d8f",
770 | "comment": "",
771 | "command": "store",
772 | "target": "TICKERHERE",
773 | "targets": [],
774 | "value": "TICKER"
775 | }, {
776 | "id": "4b86aaa8-891d-41e0-b7ca-65ae2fe3da6e",
777 | "comment": "",
778 | "command": "store",
779 | "target": "1.00",
780 | "targets": [],
781 | "value": "LIMIT"
782 | }, {
783 | "id": "75f293d7-1cac-4ee8-8c7a-88aba29f705d",
784 | "comment": "",
785 | "command": "open",
786 | "target": "https://client.schwab.com/app/trade/tom/#/trade",
787 | "targets": [],
788 | "value": ""
789 | }, {
790 | "id": "833779a8-533b-463a-a067-9c2e018286f9",
791 | "comment": "",
792 | "command": "executeScript",
793 | "target": "return Array.from({length: 30}, (_, i) => i);;",
794 | "targets": [],
795 | "value": "accounts"
796 | }, {
797 | "id": "58b684b4-6dfc-4737-abee-15cc61bee104",
798 | "comment": "",
799 | "command": "executeScript",
800 | "target": "return -1",
801 | "targets": [],
802 | "value": "target"
803 | }, {
804 | "id": "08c1589b-8e32-4f0c-a635-44e9dcd1bb41",
805 | "comment": "",
806 | "command": "executeScript",
807 | "target": "let list = ${accounts}; list = list.slice(list.indexOf(${target}) + 1); return list;",
808 | "targets": [],
809 | "value": "numb"
810 | }, {
811 | "id": "e3bdaf58-60bf-4550-8df9-4456272b250c",
812 | "comment": "",
813 | "command": "executeScript",
814 | "target": "return ${TICKER}.split(\",\");",
815 | "targets": [],
816 | "value": "TICKERS"
817 | }, {
818 | "id": "3ac1254f-39aa-4c41-ace7-353028bb9fbe",
819 | "comment": "",
820 | "command": "forEach",
821 | "target": "numb",
822 | "targets": [],
823 | "value": "account"
824 | }, {
825 | "id": "d6b7bb62-03d9-4fce-9eb7-7151bd64c76a",
826 | "comment": "",
827 | "command": "verifyElementPresent",
828 | "target": "xpath=//sdps-account-selector/div/div/button",
829 | "targets": [
830 | ["id=basic-example-small", "id"],
831 | ["css=#basic-example-small", "css:finder"],
832 | ["xpath=//button[@id='basic-example-small']", "xpath:attributes"],
833 | ["xpath=//div[@id='basic-example-small-container']/button", "xpath:idRelative"],
834 | ["xpath=//sdps-account-selector/div/div/button", "xpath:position"]
835 | ],
836 | "value": ""
837 | }, {
838 | "id": "c474eea2-e016-4579-b2d7-9556ab71f624",
839 | "comment": "",
840 | "command": "click",
841 | "target": "css=.sdps-account-selector__icon",
842 | "targets": [
843 | ["css=.sdps-account-selector__icon", "css:finder"],
844 | ["xpath=//button[@id='basic-example-small']/span[5]", "xpath:idRelative"],
845 | ["xpath=//span[5]", "xpath:position"]
846 | ],
847 | "value": ""
848 | }, {
849 | "id": "d2afd6e1-1661-400d-936e-7df69005dd54",
850 | "comment": "",
851 | "command": "assertElementPresent",
852 | "target": "xpath=//*[@id=\"basic-example-small-header-0-account-${account}\"]",
853 | "targets": [],
854 | "value": ""
855 | }, {
856 | "id": "a0e6a97e-7349-449f-8665-4db965e9c5c9",
857 | "comment": "",
858 | "command": "click",
859 | "target": "xpath=//*[@id=\"basic-example-small-header-0-account-${account}\"]",
860 | "targets": [],
861 | "value": ""
862 | }, {
863 | "id": "0de48f3f-582d-4b67-b485-b99f4ddbb41d",
864 | "comment": "",
865 | "command": "forEach",
866 | "target": "TICKERS",
867 | "targets": [],
868 | "value": "TICK"
869 | }, {
870 | "id": "ae78d933-642e-484b-b2af-5d1fb09ce3cb",
871 | "comment": "",
872 | "command": "pause",
873 | "target": "1750",
874 | "targets": [],
875 | "value": ""
876 | }, {
877 | "id": "36c935bf-68f9-41a3-afa5-5f9487aaffb2",
878 | "comment": "",
879 | "command": "assertEditable",
880 | "target": "id=_txtSymbol",
881 | "targets": [
882 | ["id=_txtSymbol", "id"],
883 | ["name=symbol", "name"],
884 | ["css=#\\_txtSymbol", "css:finder"],
885 | ["xpath=//input[@id='_txtSymbol']", "xpath:attributes"],
886 | ["xpath=//mc-trade-symbol[@id='mctsymbol1ea50182']/div/div/div/input", "xpath:idRelative"],
887 | ["xpath=//mc-trade-symbol/div/div/div/input", "xpath:position"]
888 | ],
889 | "value": ""
890 | }, {
891 | "id": "61fb14ea-b1a9-4955-84cc-f648eb918843",
892 | "comment": "",
893 | "command": "type",
894 | "target": "id=_txtSymbol",
895 | "targets": [
896 | ["id=_txtSymbol", "id"],
897 | ["name=symbol", "name"],
898 | ["css=#\\_txtSymbol", "css:finder"],
899 | ["xpath=//input[@id='_txtSymbol']", "xpath:attributes"],
900 | ["xpath=//mc-trade-symbol[@id='mctsymbolaa9bf0b8']/div/div/div/input", "xpath:idRelative"],
901 | ["xpath=//mc-trade-symbol/div/div/div/input", "xpath:position"]
902 | ],
903 | "value": "${TICK}"
904 | }, {
905 | "id": "fdf65b47-25c1-4acd-b15e-5cf3f4c8f102",
906 | "comment": "",
907 | "command": "pause",
908 | "target": "0",
909 | "targets": [],
910 | "value": ""
911 | }, {
912 | "id": "5047608b-3de7-4434-ba79-dc2a5948d708",
913 | "comment": "",
914 | "command": "sendKeys",
915 | "target": "id=_txtSymbol",
916 | "targets": [
917 | ["id=_txtSymbol", "id"],
918 | ["name=symbol", "name"],
919 | ["css=#\\_txtSymbol", "css:finder"],
920 | ["xpath=//input[@id='_txtSymbol']", "xpath:attributes"],
921 | ["xpath=//mc-trade-symbol[@id='mctsymbolaa9bf0b8']/div/div/div/input", "xpath:idRelative"],
922 | ["xpath=//mc-trade-symbol/div/div/div/input", "xpath:position"]
923 | ],
924 | "value": "${KEY_ENTER}"
925 | }, {
926 | "id": "5a6e8f52-4866-4a24-b41f-f4abc6fc8e97",
927 | "comment": "",
928 | "command": "pause",
929 | "target": "1250",
930 | "targets": [],
931 | "value": ""
932 | }, {
933 | "id": "8219c240-b633-4324-a396-79c2023f525b",
934 | "comment": "",
935 | "command": "click",
936 | "target": "id=_action",
937 | "targets": [
938 | ["id=_action", "id"],
939 | ["name=action", "name"],
940 | ["css=#\\_action", "css:finder"],
941 | ["xpath=//select[@id='_action']", "xpath:attributes"],
942 | ["xpath=//mc-trade-order-leg[@id='mctordleg424668ec']/div/div[2]/div/select", "xpath:idRelative"],
943 | ["xpath=//mc-trade-order-leg/div/div[2]/div/select", "xpath:position"]
944 | ],
945 | "value": ""
946 | }, {
947 | "id": "61167d4c-a871-4268-bb43-5bef5acbf544",
948 | "comment": "",
949 | "command": "select",
950 | "target": "id=_action",
951 | "targets": [],
952 | "value": "label=Buy"
953 | }, {
954 | "id": "b70662fe-d7e5-4914-96bc-d00b4f724f4c",
955 | "comment": "",
956 | "command": "click",
957 | "target": "css=.mtt-dropdown__select",
958 | "targets": [
959 | ["css=.mtt-dropdown__select", "css:finder"],
960 | ["xpath=//div[@id='mcaio-orderType-container']/div/div/div/select", "xpath:idRelative"],
961 | ["xpath=//div[5]/div/div/div/select", "xpath:position"]
962 | ],
963 | "value": ""
964 | }, {
965 | "id": "705f12d4-ca81-459b-bd78-660638c5c5cf",
966 | "comment": "",
967 | "command": "select",
968 | "target": "css=.mtt-dropdown__select",
969 | "targets": [
970 | ["css=.mtt-dropdown__select", "css:finder"],
971 | ["xpath=//div[@id='mcaio-orderType-container']/div/div/div/select", "xpath:idRelative"],
972 | ["xpath=//div[5]/div/div/div/select", "xpath:position"]
973 | ],
974 | "value": "label=Limit"
975 | }, {
976 | "id": "2ec1df95-424c-47fa-96af-bf807a10f9dd",
977 | "comment": "",
978 | "command": "click",
979 | "target": "id=_txtLimitPrice",
980 | "targets": [
981 | ["id=_txtLimitPrice", "id"],
982 | ["name=limitPrice", "name"],
983 | ["css=#\\_txtLimitPrice", "css:finder"],
984 | ["xpath=//input[@id='_txtLimitPrice']", "xpath:attributes"],
985 | ["xpath=//div[@id='mcaio-LimitPriceContainer']/div/div/input", "xpath:idRelative"],
986 | ["xpath=//mc-trade-order-control/div/div/div[7]/div/div/input", "xpath:position"]
987 | ],
988 | "value": ""
989 | }, {
990 | "id": "7fc08730-f086-46e0-bf95-fc42bd1dd330",
991 | "comment": "",
992 | "command": "type",
993 | "target": "id=_txtLimitPrice",
994 | "targets": [
995 | ["id=_txtLimitPrice", "id"],
996 | ["name=limitPrice", "name"],
997 | ["css=#\\_txtLimitPrice", "css:finder"],
998 | ["xpath=//input[@id='_txtLimitPrice']", "xpath:attributes"],
999 | ["xpath=//div[@id='mcaio-LimitPriceContainer']/div/div/input", "xpath:idRelative"],
1000 | ["xpath=//mc-trade-order-control/div/div/div[7]/div/div/input", "xpath:position"]
1001 | ],
1002 | "value": "${LIMIT}"
1003 | }, {
1004 | "id": "edcecf76-1461-4284-8d59-add6ee6e42e4",
1005 | "comment": "",
1006 | "command": "click",
1007 | "target": "css=.mcaio-order--reviewbtn",
1008 | "targets": [
1009 | ["css=.mcaio-order--reviewbtn", "css:finder"],
1010 | ["xpath=(//button[@type='button'])[39]", "xpath:attributes"],
1011 | ["xpath=//div[@id='mcaio-footer']/div/div[2]/button[2]", "xpath:idRelative"],
1012 | ["xpath=//div[4]/div/div[2]/button[2]", "xpath:position"],
1013 | ["xpath=//button[contains(.,'Review Order')]", "xpath:innerText"]
1014 | ],
1015 | "value": ""
1016 | }, {
1017 | "id": "0a6c7545-2d2b-48d6-9560-f2bfbd35de71",
1018 | "comment": "",
1019 | "command": "pause",
1020 | "target": "1650",
1021 | "targets": [],
1022 | "value": ""
1023 | }, {
1024 | "id": "b2df163d-061c-4b8a-a7ca-881f0bb6a6b9",
1025 | "comment": "",
1026 | "command": "click",
1027 | "target": "id=mtt-place-button",
1028 | "targets": [
1029 | ["id=mtt-place-button", "id"],
1030 | ["css=#mtt-place-button", "css:finder"],
1031 | ["xpath=//button[@id='mtt-place-button']", "xpath:attributes"],
1032 | ["xpath=//div[@id='mcaio-footer']/div/div/button[3]", "xpath:idRelative"],
1033 | ["xpath=//button[3]", "xpath:position"]
1034 | ],
1035 | "value": ""
1036 | }, {
1037 | "id": "07704e42-6baf-4c7a-ad17-9616a248c575",
1038 | "comment": "",
1039 | "command": "click",
1040 | "target": "css=.mcaio--mcaio-cta-buttons-anothertrade",
1041 | "targets": [
1042 | ["css=.mcaio--mcaio-cta-buttons-anothertrade", "css:finder"],
1043 | ["xpath=//button[@onclick='mcttrade62f278b1.handlePlaceAnother()']", "xpath:attributes"],
1044 | ["xpath=//div[@id='mcaio-footer']/div/div/button[3]", "xpath:idRelative"],
1045 | ["xpath=//button[3]", "xpath:position"],
1046 | ["xpath=//button[contains(.,'Place Another Order')]", "xpath:innerText"]
1047 | ],
1048 | "value": ""
1049 | }, {
1050 | "id": "ffcaa89a-4c46-4fe1-8890-0a1f975a4531",
1051 | "comment": "",
1052 | "command": "echo",
1053 | "target": "${account} Buying ${TICK} Test Successful!",
1054 | "targets": [],
1055 | "value": ""
1056 | }, {
1057 | "id": "44826bce-2def-4cd5-bb2b-c8acaba96136",
1058 | "comment": "",
1059 | "command": "end",
1060 | "target": "",
1061 | "targets": [],
1062 | "value": ""
1063 | }, {
1064 | "id": "c2c2b9c2-c463-4b26-8359-cd6a0cb46d9c",
1065 | "comment": "",
1066 | "command": "end",
1067 | "target": "",
1068 | "targets": [],
1069 | "value": ""
1070 | }, {
1071 | "id": "c756cbed-7f6b-48fa-b495-3dbd5eb29662",
1072 | "comment": "",
1073 | "command": "open",
1074 | "target": "https://github.com/sponsors/Prem-ium/sponsorships?sponsor=Prem-ium&tier_id=308205&preview=false",
1075 | "targets": [],
1076 | "value": ""
1077 | }, {
1078 | "id": "0e25581b-7181-4098-af03-1bb73b93c5b0",
1079 | "comment": "",
1080 | "command": "echo",
1081 | "target": "Please consider sponsoring this project by becoming a sponsor. Gold sponsors get an invite to a private repository with exclusive features, priority bug support, & frequent updates. If you are a Gold sponsor, please remember to use the private sponsors repo instead of this public version to reap the benefits of your support! Thank you for your support!",
1082 | "targets": [],
1083 | "value": ""
1084 | }]
1085 | }],
1086 | "suites": [{
1087 | "id": "5c03e64a-0f9b-422a-b416-65be8986bacd",
1088 | "name": "Default Suite",
1089 | "persistSession": false,
1090 | "parallel": false,
1091 | "timeout": 300,
1092 | "tests": []
1093 | }],
1094 | "urls": ["https://client.schwab.com/", "https://client.schwab.com/app/trade/tom/#/trade"],
1095 | "plugins": []
1096 | }
--------------------------------------------------------------------------------