Screenshot Bot

Automated iOS Screenshot Service

Jamie Douglas, Alexander Baumhoer, Alexander Murphy

Problem

  • Slow and cumbersome process for CSA's to send screenshots to clients
  • Takes 17.5 minutes to multiple days for a single edit
  • If one CSA makes one edit on one offer every business day in a year, they are waiting at least 76.1 hours
  • Disrupts CSA workflow and the ability to develop more important skills
  • Impedes business revenue expansion goals
  • This problem is 6 years old…

Goals

  • Minimize a tedious part of CSA work day so they can focus on more important, impactful work, including program expansion, skill development, and growing client relationships.

  • Reduce the amount of time it takes to generate updated screenshots so that it's under 17.5 minutes by:

    • Automating the image-taking process

    • Making the updates show up in the app more frequently and reliably

Our Workflow

  • "Mini Sprints" 3 hour blocks of work time before meeting

    • Setting goals and evaluating progress

    • Display work

    • Report roadblocks

  • Alex^2 were working on programming problems while Jamie was meeting with stakeholders and maintaining alignment

  • Jamie generated documentation

Implementation

  • Fastlane CI (Ruby wrapper for Xcode build tools)

  • Node.js server app to provide webhooks into Fastlane

  • Server side rendered administration page

  • Dynamically generated UI tests based on offer ids

  • AWS S3 storage for completed screenshots

  • Active Admin integration for offers

  • AWS Lamda for emailing final screenshots

UI Test Example

func testSnapshotForOfferId178786() {
    let app = XCUIApplication()
    setupSnapshot(app)
    let textField = app.children(matching: .window)
        .element(boundBy: 0).children(matching: .other)
        .element.children(matching: .other)
        .element.children(matching: .other)
        .element.children(matching: .other)
        .element.children(matching: .other)
        .element.children(matching: .other)
        .element.children(matching: .textField)

    textField.element.tap()
    textField.element.typeText("offer/178786")
    app.buttons["  Route  "].tap()
    
    snapshot("178786")
    XCUIApplication().scrollViews.children(matching: .other)
        .element.children(matching: .other)
        .element(boundBy: 0).children(matching: .other)
        .element(boundBy: 0).children(matching: .image)
        .element.swipeUp()

    snapshot("178786_section_two")
}

UI Test In Action

Administration Console

Batch Details

View Batch Build Output

Active Admin Integration

Straight to your inbox 📬

Results

  • Proof of concept implemented
  • Proved that this system can screenshot offers quicker than the mean time required by CSAs
  • Cut down time by 3 minutes
  • Reliable expectations and removed the need for CSA's to use their personal phones 
  • Screenshots directly emailed to CSA who requested

Recommendations

  • Further testing required for this to become production ready
  • Fragility concerns: in app messages, alerts
  • Android?
  • Formatted deck/PPT 
  • Automatically upload to Box
  • MVT QA automation & improvements?
  • Does not support offer engagements

 

Final Recommendation: Considering the complexity of this system, we recommend further vetting.

Just one more thing...

Not just offers.....

Any universal link

Every Retailer Category

Every Bonus

Every Retailer Gallery

public var questions: [Question]?

deck

By thexande

deck

  • 183