profile
viewpoint
John Hammerlund johnhammerlund @mindbody San Luis Obispo, CA

johnhammerlund/hubot-proxy 12

A hubot adapter event listener that sits inbetween hubot and the desired hubot adapter.

johnhammerlund/BumblebeeIOS 3

An extension to Bumblebee to support native and hybrid IOS apps.

johnhammerlund/BumblebeeAndroid 1

An extension to Bumblebee to support native and hybrid Android apps.

johnhammerlund/APITestRepo 0

This is only for testing github API

johnhammerlund/appium-dot-exe 0

Windows GUI for Appium

johnhammerlund/awesome-swift 0

A collaborative list of awesome Swift libraries and resources. Feel free to contribute!

johnhammerlund/Bumblebee 0

A layer on top of the Selenium browser automation library.

johnhammerlund/card.io-iOS-source 0

The open-source code for the card.io-iOS-SDK: provides fast, easy credit card scanning in mobile apps

johnhammerlund/CocoaLumberjack 0

A fast & simple, yet powerful & flexible logging framework for Mac and iOS

johnhammerlund/Conduit 0

Robust Swift networking for web APIs

PR opened mindbody/Conduit

Prepare for Release 1.0.0 release

Summary

Prepare for release v1.0.0

Implementation

  • Fix references where iOS 8.0 was still being used.
+21 -24

0 comment

5 changed files

pr created time in 24 days

push eventmindbody/Conduit

Eneko Alonso

commit sha d0fd17e6b45016c0b052fac9c415e4a008636b04

Update README

view details

push time in 24 days

create barnchmindbody/Conduit

branch : release/1.0.0

created branch time in 24 days

create barnchmindbody/Conduit

branch : main

created branch time in 24 days

startedjohnhammerlund/hubot-proxy

started time in a month

issue commentBumblebee/Bumblebee

ParentPage cannot find element after browser window is refreshed.

@RafalDardzinski If you can provide a link to a github repo or zip file with code that I can run to reproduce the issue, I am happy to take a look at it.

RafalDardzinski

comment created time in a month

issue openedBumblebee/Bumblebee

ParentPage cannot find element after browser window is refreshed.

I have an issue with refreshing browser page. The problem is quite complex, so please bear with me.

The web application I work on has resource versioning feature and it's possible to view data from specific version of a resource by providing its id in url (each new version of a resource has unique id). I have two concurrency test scenarios that I need to cover.

During the tests I always have two browser windows open:

  • Browser 1 is for asserts.
  • Browser 2 is for doing things "behind the scenes" (like modifying resource when it is viewed by Browser 1).

Test 1

Given I have two browser windows opened on a page that displays details of latest version of the same resource.

  1. Browser 2 clicks on Edit button modifies the resource and saves.
  2. Browser 1 refreshes the page.

Expected result: Since url in Browser 1 is not leading to the latest version of a resource anymore, a "historic" version of a page is rendered.

I have two block models: ResourcePage for viewing latest version of a resource and ResourceHistoricPage for viewing historic version of a resource. In order to test the scenario above, when Browser 1 refreshes I need to switch context from ResourcePage to ResourceHistoricPage. I've written a simple helper method that allows me to do so:

private static TRefreshedPageBlock RefreshPage<TRefreshedPageBlock>(BaseBlock pageToRefresh) where TRefreshedPageBlock : BaseBlock
{
    pageToRefresh.Session.Refresh();
    return pageToRefresh.Session.CurrentBlock<TRefreshedPageBlock>();
}

Test 2

Given I have two browser windows opened on a page that displays details of latest version of the same resource.

  1. Browser 2 clicks on Edit button modifies the resource and saves.
  2. Browser 1 tries to modify the resource by clicking several available buttons (e.g. Edit or Delete).

Expected result: A toast message stating there's a new version of a file is shown for each attempt to click on a button.

Toasts are managed by ParentPage which is shared by both ResourcePage and ResourceHistoricPage. The mechanism is implemented like so:

public class ParentPage : Page 
{
    public Toast Toast => new Toast(this);

    public void RemoveToasts()
    {
        while (FindElements(By.ClassName("toast")).Any())
        {
            Toast.Tag.Click();
        }
    }
}

Below the implementation of the Toast element.

public class Toast : WebBlock
{
    private static readonly By Selector = By.ClassName("toast");

    public string Message { get; }

    public Toast(ParentPage parentPage)
        : base(parentPage, Selector)
    {
        Wait.Until(ExpectedConditions.ElementIsVisible(Selector));

        Message = FindElement(By.ClassName("toast-message")).Text;
    }
}

The test follows the following pattern:

  1. Both browser windows start on the same page (ResourcePage).
  2. Browser 2 modifies the resource.
  3. Browser 1: for each button that modifies the resource on a page:
    1. Click on a button.
    2. Check if ResourcePage#Parent#Toast#Message is as expected.
    3. Remove toast using ResourcePage#Parent#RemoveToasts();

The problem

Both of these tests work correctly when run in isolation. However, every time I run Test 1 before Test 2, Test 2 fails when calling ResourcePage#ParentPage#RemoveToasts() with an error saying that it cannot find element with class toast. Interestingly enough, the assert on Toast#Message passes, the problem is with trying to remove the toasts. The toast itself gets rendered correctly.

Before each test both browsers navigate to the ResourcePage and variable under test is reassigned, so there shoudln't be any problems with invalid context references.

We discovered that the workaround for this issue would be to close the refreshed tab on Browser 1 and open a new one. However, I'm curious whether the problem is in our implementation of refresh mechanism or is it a bug within Bumblebee?

created time in a month

created tagmindbody/Conduit

tag0.22.0

Robust Swift networking for web APIs

created time in 2 months

release mindbody/Conduit

0.22.0

released time in 2 months

push eventmindbody/Conduit

Eneko Alonso

commit sha 12fe83187edcb6e4afd5e9e525dcf9d4d639e8e7

Release 0.22.0 (#157) Release 0.22.0

view details

push time in 2 months

delete branch mindbody/Conduit

delete branch : release/0.22.0

delete time in 2 months

PR merged mindbody/Conduit

Reviewers
Release 0.22.0

Summary

  • Release 0.22.0
+17 -2

0 comment

3 changed files

eneko

pr closed time in 2 months

PR opened mindbody/Conduit

Reviewers
Release 0.22.0

Summary

  • Release 0.22.0
+17 -2

0 comment

3 changed files

pr created time in 2 months

create barnchmindbody/Conduit

branch : release/0.22.0

created branch time in 2 months

push eventmindbody/Conduit

Eneko Alonso

commit sha 6aa00e321e00eb69dc45bae2a3f2e03bfa1769ca

Remove deprecated types (#156) ### Summary - Remove deprecated types: `BearerOAuth2Token`, `OAuth2TokenAES256CBCCipher`, and `OAuth2TokenDiskStore` - Set `IPHONEOS_DEPLOYMENT_TARGET` to 9.0 for all Conduit targets

view details

push time in 2 months

delete branch mindbody/Conduit

delete branch : remove/deprecations

delete time in 2 months

PR merged mindbody/Conduit

Remove deprecated types enhancement

This pull request includes (pick all that apply):

  • [ ] Bugfixes
  • [ ] New features
  • [x] Breaking changes
  • [ ] Documentation updates
  • [ ] Unit tests
  • [ ] Other

Summary

  • Remove deprecated types: BearerOAuth2Token, OAuth2TokenAES256CBCCipher, and OAuth2TokenDiskStore
  • Set IPHONEOS_DEPLOYMENT_TARGET to 9.0 for all Conduit targets
+10 -492

0 comment

10 changed files

eneko

pr closed time in 2 months

push eventmindbody/Conduit

Eneko Alonso

commit sha c03e31091ff46c3706ae9f8d4c9c370e88717107

Set IPHONEOS_DEPLOYMENT_TARGET to 9.0

view details

push time in 2 months

PR closed mindbody/Conduit

Reviewers
Set up Github CI workflow

Summary

Attempt to set up GitHub CI workflow

+54 -22

0 comment

2 changed files

eneko

pr closed time in 2 months

PR opened mindbody/Conduit

Reviewers
Remove deprecated types enhancement

This pull request includes (pick all that apply):

  • [ ] Bugfixes
  • [ ] New features
  • [x] Breaking changes
  • [ ] Documentation updates
  • [ ] Unit tests
  • [ ] Other

Summary

  • Remove deprecated types: BearerOAuth2Token, OAuth2TokenAES256CBCCipher, and OAuth2TokenDiskStore
+4 -486

0 comment

10 changed files

pr created time in 2 months

push eventmindbody/Conduit

Eneko Alonso

commit sha f007291c1a4cfb5b057d4cee64bc89aac13e04e1

CHANGELOG

view details

push time in 2 months

create barnchmindbody/Conduit

branch : remove/deprecations

created branch time in 2 months

more