| Age | Commit message (Collapse) | Author | 
|---|
|  | Harvest requires either a link to the application or an email address to
be included in the 'User-Agent' header with requests to their API
(https://help.getharvest.com/api-v2/introduction/overview/general/#api-requests). | 
|  |  | 
|  | Otherwise it gets created in the current directory, and this fails when
run from Launchd because that runs at the root of the filesystem. | 
|  |  | 
|  |  | 
|  | These are required for the `WeekIsComplete` checker. | 
|  | Before submitting the time sheet for approval (and before doing anything
with Selenium), ensure that there's at least one time entry logged for
each day in the week.
To do this, we query the Harvest API with newly-required account ID and
API token values. This gives us a bunch of time entries. We check them
to see if they fell in the last week. If all weekdays from the last week
have at least one time entry, then the rest of the program executes and
we run Selenium to submit the time sheet.
If any day had missing entries, an exception is raised and the program
exits. | 
|  | Check that the timesheet hasn't already been submitted before trying to
submit it. Otherwise we'd resubmit the timesheet which is not what we
want. We only want a single submission across successive runs of the
program. | 
|  | Remove our test date and use the most recent Friday instead. | 
|  | This time the test for page load using the `friday` date didn't work.
Not sure why, it should be the same and the text and element looks
right. The only thing I can think of is that Selenium isn't smart enough
to know there are multiple elements with the same class name and so it
was comparing the wrong one, and last time when it worked it was just a
fluke that happened to work the first time.
Replace the CSS selector with an XPath selector that will get a "unique"
element for us and still check that the correct date appears (here,
formatted as "Wednesday, 24 January"). | 
|  | Get rid of our header variables as these are now replaced with our
command line arguments.
Add function arguments to `login` and `submit_week_for_approval` to take
the values they need from the command line arguments. | 
|  | Make a function that will get a password string given a shell command.
This allows us to pass a command to the program instead of a clear text
password. | 
|  | Doesn't do anything but parse the arguments yet. Really liking Python's
built-in argument parser, really simple to use. | 
|  | Don't launch the GUI. | 
|  | These debug helpers are no longer needed now that we have a working
program. | 
|  | Instead of waiting on an "invisible" `<script>` tag that Selenium
doesn't know how to do, check that the "week" page is loaded a different
way: by checking that the year appears in the header and the day appears
in a column header.
Uncomment the rest of the function.
We weren't clicking the confirmation button (`.approval-confirmation`).
Added a `click()` call there. | 
|  | Just saving this because it works, which is neat. Unfortunately, I can't
use it in a Selenium wait expectation because it doesn't allow me to
compare arbitrary strings. I have to speak its language, with elements
and contents etc.
This answer showed me how to do this:
https://stackoverflow.com/questions/20497607/how-to-get-the-contents-of-a-script-tag-in-selenium/20498102#20498102 | 
|  | First pass, doesn't work yet.
This will determine last Friday's date and visit the page corresponding
to that week. It will then try to submit that week's timesheet.
The `wait` on the `script` tag contents waiting for the "week" page to
load isn't working. Looks like you can't wait on the contents of a
`<script>` tag.
Moved the `wait` variable outside of `login` so it can be used in
`submit_week_for_approval`. | 
|  | Wait until an element from the logged-in page is found before finishing
or moving on from login. | 
|  | The start of a script that will log into Harvest via the normal web
interface and submit the most recent full week's time sheet for
approval.
It uses Selenium and the Firefox WebDriver. It works with the
`-headless` option, but I've commented that out for testing. Right now,
it can open the Harvest sign-in page and log in. |