Control and manage Android devices from your browser.

Overview

Warning

This project along with other ones in OpenSTF organisation is provided as is for community, without active development.

You can check any other forks that may be actively developed and offer new/different features here.

Active development has been moved to DeviceFarmer organisation. Version 3.4.2 is the last release of OpenSTF on DockerHub and 3.4.1 on npmjs.

STF

Build Status Docker Pulls NPM version Backers on Open Collective Sponsors on Open Collective

STF (or Smartphone Test Farm) is a web application for debugging smartphones, smartwatches and other gadgets remotely, from the comfort of your browser.

STF was originally developed at CyberAgent to control a growing collection of more than 160 devices. As of July 2016 development is mainly sponsored by HeadSpin and other individual contributors.

We welcome financial contributions in full transparency on our open collective.

Close-up of device shelf

Super short screencast showing usage

Credits

Sponsors

Thank you to all our sponsors! (please ask your company to also support this open source project by becoming a sponsor)

Gold Sponsor

HeadSpin

HeadSpin provides secure and scalable STF for iOS integrated with Appium/XCTest/Selenium/Espresso, High speed interaction Audio/Video/Game testing and AI based Root cause analysis for Performance Management. It's free to start using HeadSpin in 150+ locations worldwide! Try it out for free.

HeadSpin offers a generous monthly contribution towards STF development.

Contributors

Thank you to all the people who have already contributed to STF!

Backers

Thank you to all our backers! [Become a backer]

How to become a sponsor

Please use our open collective or contact us directly for sponsor arrangements. Both recurring and one-time contributions are most welcome. Contributions towards a specific issue or feature are also possible, and can be attributed to your company in our release notes and other related materials. Hardware-only contributions, whether new or used, are also extremely helpful and well received, especially if you find a device that doesn't work. Please see our donation transparency report for past hardware contributions.

Features

  • OS support
    • Android
      • Supports versions 2.3.3 (SDK level 10) to 9.0 (SDK level 28)
      • Supports Wear 5.1 (but not 5.0 due to missing permissions)
      • Supports Fire OS, CyanogenMod, and other heavily Android based distributions
      • root is not required for any current functionality
  • Remote control any device from your browser
    • Real-time screen view
      • Refresh speed can reach 30-40 FPS depending on specs and Android version. See minicap for more information.
      • Rotation support
    • Supports typing text from your own keyboard
      • Supports meta keys
      • Copy and paste support (although it can be a bit finicky on older devices, you may need to long-press and select paste manually)
      • May sometimes not work well with non-Latin languages unfortunately.
    • Multitouch support on touch screens via minitouch, two finger pinch/rotate/zoom gesture support on regular screens by pressing Alt while dragging
    • Drag & drop installation and launching of .apk files
      • Launches main launcher activity if specified in the manifest
    • Reverse port forwarding via minirev
      • Access your local server directly from the device, even if it's not on the same network
    • Open websites easily in any browser
      • Installed browsers are detected in real time and shown as selectable options
      • Default browser is detected automatically if selected by the user
    • Execute shell commands and see real-time output
    • Display and filter device logs
    • Use adb connect to connect to a remote device as if it was plugged in to your computer, regardless of ADB mode and whether you're connected to the same network
    • File Explorer to access device file system
    • Experimental VNC support (work in progress)
  • Monitor your device inventory
    • See which devices are connected, offline/unavailable (indicating a weak USB connection), unauthorized or unplugged
    • See who's using a device
    • Search devices by phone number, IMEI, ICCID, Android version, operator, product name, group name and/or many other attributes with easy but powerful queries
    • Show a bright red screen with identifying information on a device you need to locate physically
    • Track battery level and health
    • Rudimentary Play Store account management
      • List, remove and add new accounts (adding may not work on all devices)
    • Display hardware specs
  • Use the Booking & Partitioning systems
    • Overview
      • The partitioning system allow you [administrator level] to allocate distinct sets of devices to different projects or organizations (i.e. represented by user sets) for an unlimited period
      • The booking system allows you to reserve a set of devices for a set of users during a limited time (e.g. from 3:00 am to 4:00 am during 5 days)
      • What is common to the booking & partitioning systems is the concept of Group, that is, an association of devices, users and a specification of time
      • Report to GroupFeature.pdf for detailed documentation on how to use this feature
    • Monitor your group inventory
      • See which groups are active, ready or pending, as well as other group properties: name, identifier, owner, devices, users, class, duration, repetition, starting date, expiration date
      • Search groups by their property values
      • Contact by email the owners of the selected groups
    • Manage your groups
      • Create a group by specifying its name, devices, users and schedule
      • Get ready your group in order it is scheduled by the system
      • Search groups by their property values
      • Remove your group or a selection of your groups
      • Contact by email the owners of the selected groups [administrator level]
  • Manage the devices [administrator level]
    • Search the devices by their property values
    • Remove a device or a selection of devices meeting a set of filters: present, booked, annotated, controlled
  • Manage the users [administrator level]
    • Create a user by providing his name and his email
    • Search the users by their property values
    • Remove a user or a selection of users meeting a set of filters: group owner
    • Contact a user or a selection of users by email
    • Set the default groups quotas applicable to all users
    • Set the groups quotas applicable to a specific user
  • Simple REST API

Status

STF is in continued, active development, but development is still largely funded by individual team members and their unpaid free time, leading to slow progress. While normal for many open source projects, STF is quite heavy on the hardware side, and is therefore somewhat of a money sink. See how to become a sponsor if you or your company would like to support future development.

We're also actively working to expand the team, don't be afraid to ask if you're interested.

Short term goals

Here are some things we are planning to address ASAP.

  1. Performance
  2. Properly expose the new VNC functionality in the UI
  3. Properly reset user data between uses (Android 4.0+)
  4. Automated scheduled restarts for devices
  5. More!

Consulting services

We highly encourage open participation in the community. However, if you're running a business that uses STF or would like to use STF, you may sometimes want to have an expert, i.e. one of the original developers or a skilled contributor, work with you to set up a prototype for evaluation purposes, add support for new or old hardware, figure out an issue, fix a bug or add some new feature. Our services are similar to FFmpeg's. Contact us with details and we'll see what we can do.

Availability is limited and tied to individual developer's schedules.

A quick note about security

As the product has evolved from an internal tool running in our internal network, we have made certain assumptions about the trustworthiness of our users. As such, there is little to no security or encryption between the different processes. Furthermore, devices do not get completely reset between uses, potentially leaving accounts logged in or exposing other sensitive data. This is not an issue for us, as all of our devices are test devices and are only used with test accounts, but it may be an issue for you if you plan on deploying STF to a multiuser environment. We welcome contributions in this area.

Requirements

Note that you need these dependencies even if you've installed STF directly from NPM, because they can't be included in the package.

On Mac OS, you can use homebrew to install most of the dependencies:

brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config

On Windows you're on your own. In theory you might be able to get STF installed via Cygwin or similar, but we've never tried. In principle we will not provide any Windows installation support, but please do send a documentation pull request if you figure out what to do.

We also provide a Docker container in the Docker Hub as openstf/stf. You can use our Dockerfile as guidance if you'd prefer to do the installation yourself.

You should now be ready to build or run STF.

Note that while Mac OS can be used for development, it doesn't provide a very reliable experience in production due to (presumed) bugs in ADB's Mac OS implementation. We use CoreOS but any Linux or BSD distribution should do fine.

Installation

As mentioned earlier, you must have all of the requirements installed first. Then you can simply install via NPM:

npm install -g stf

Now you're ready to run. For development, though, you should build instead.

Building

After you've got all the requirements installed, it's time to fetch the rest of the dependencies.

First, fetch all NPM and Bower modules:

npm install

You may also wish to link the module so that you'll be able to access the stf command directly from the command line:

npm link

You should now have a working installation for local development.

Running

STF comprises of several independent processes that must normally be launched separately. In our own setup each one these processes is its own systemd unit. See DEPLOYMENT.md and Setup Examples if you're interested.

For development purposes, however, there's a helper command to quickly launch all required processes along with a mock login implementation. Note that you must have RethinkDB running first.

If you don't have RethinkDB set up yet, to start it up, go to the folder where you'd like RethinkDB to create a rethinkdb_data folder in (perhaps the folder where this repo is) and run the following command:

rethinkdb

Note: if it takes a long time for RethinkDB to start up, you may be running into rethinkdb/rethinkdb#4600 (or rethinkdb/rethinkdb#6047). This usually happens on macOS Sierra. To fix this on macOS, first run scutil --get HostName to check if the HostName variable is unset. RethinkDB needs it to generate a server name for your instance. If you find that it's empty, running sudo scutil --set HostName $(hostname) has been confirmed to fix the issue on at least one occasion. See the issues for more complete solutions.

You should now have RethinkDB running locally. Running the command again in the same folder will reuse the data from the previous session.

An administrator level is available in STF in addition of the native user one, with increased rights on some features (e.g. booking & partitioning systems, management of users & devices, ...). The corresponding built-in administrator user has the following default credentials:

Another built-in object exists, this is the root standard group to which the users and devices belong the first time they register to the STF database, its default name is Common

These built-in objects are created in the STF database if they do not already exist

Of course, you can override the default values of these built-in objects by settings the following environment variables before to initialize the STF database through stf local or stf migrate commands:

  • root standard group name: STF_ROOT_GROUP_NAME
  • administrator user name: STF_ADMIN_NAME
  • administrator user email: STF_ADMIN_EMAIL

You're now ready to start up STF itself:

stf local

After the webpack build process has finished (which can take a small while) you should have your private STF running on http://localhost:7100. If you had devices connected before running the command, those devices should now be available for use. If not, you should see what went wrong from your console. Feel free to plug in or unplug any devices at any time.

Note that if you see your device ready to use but without a name or a proper image, we're probably missing the data for that model in our device database. Everything should work fine either way.

If you want to access STF from other machines, you can add the --public-ip option for quick testing.

stf local --public-ip <your_internal_network_ip_here>

Updating

To update your development version, simply pull the repo and run npm install again. You may occasionally have to remove the whole node_modules and res/bower_components folder to prevent NPM or Bower from complaining about version mismatches.

FAQ

Can I deploy STF to actual servers?

Yes, see DEPLOYMENT.md and Setup Examples.

Will I have to change battery packs all the time?

No, not all the time. Aside from a single early failure we had within only a few months, all of our devices were doing fine for about two years. However, having reached the 2-3 year mark, several devices have started to experience visibly expanded batteries. Expanded batteries should be replaced as soon as possible. Note that this issue isn't specific to STF, it's just what happens over time. You should be prepared to replace the batteries every now and then. In any case, we consider 2 years per battery pack to be fairly good value for a device lab.

You should set up your devices so that the display is allowed to turn off entirely after a short timeout. 30 seconds or so should do just fine, STF will wake it up when necessary. Otherwise you risk reducing the lifetime of your device.

Note that you may have a problem if your USB hubs are unable to both provide enough power for charging and support a data connection at the same time (data connections require power, too). This can cause a device to stop charging when being used, resulting in many charging cycles. If this happens you will just need to get a better USB hub.

Is the system secure?

It's possible to run the whole user-facing side behind HTTPS, but that's pretty much it. All internal communication between processes is insecure and unencrypted, which is a problem if you can eavesdrop on the network. See our quick note about security.

Can I just put the system online, put a few devices there and start selling it?

Yes and no. See "Is the system secure?". The system has been built in an environment where we are able to trust our users and be confident that they're not going to want to mess with others. In the current incarnation of the system a malicious user with knowledge of the inner workings will, for instance, be able to control any device at any time, whether it is being used by someone or not. Pull requests are welcome.

Once I've got the system running, can I pretty much leave it like that or is manual intervention required?

In our experience the system runs just fine most of the time, and any issues are mostly USB-related. You'll usually have to do something about once a week.

The most common issue is that a device will lose all of its active USB connections momentarily. You'll get errors in the logs but the worker process will either recover or get respawned, requiring no action on your side.

Below are the most common errors that do require manual intervention.

  • One device worker keeps getting respawned all the time
    • Rebooting the device usually helps. If the device stays online for long enough you might be able to do it from the UI. Otherwise you'll have to SSH into the server and run adb reboot manually.
    • This could be a sign that you're having USB problems, and the device wishes to be moved elsewhere. The less complex your setup is the fewer problems you're going to experience. See troubleshooting.
    • We're working on adding periodic automatic restarts and better graceful recovery to alleviate the issue.
  • A whole group of devices keeps dying at once
    • They're most likely connected to the same USB hub. Either the hub is bad or you have other compatibility issues. In our experience this usually happens with USB 3.0 hubs, or you may have a problem with your USB extension card. See recommended hardware.
  • A device that should be online is not showing up in the list or is showing up as disconnected

How do I uninstall STF from my device?

When you unplug your device, all STF utilities except STFService stop running automatically. It doesn't do any harm to force stop or uninstall it.

To uninstall the STFService, run the following command:

adb uninstall jp.co.cyberagent.stf

You may also wish to remove our support binaries, although as mentioned before they won't run unless the device is actually connected to STF. You can do this as follows:

adb shell rm /data/local/tmp/minicap \
  /data/local/tmp/minicap.so \
  /data/local/tmp/minitouch \
  /data/local/tmp/minirev

Your device is now clean.

Troubleshooting

I plugged in a new device but it's not showing up in the list.

There can be various reasons for this behavior. Some especially common reasons are:

  • USB debugging is not enabled
    • Enable it.
  • USB debugging is enabled but the USB connection mode is wrong
    • Try switching between MTP and PTP modes and see if the device appears. This happens fairly often on Mac OS but almost never on Linux.
  • You don't have the ADB daemon running
    • Make sure ADB is running with adb start-server.
  • You haven't authorized the ADB key yet
    • Check your device for an authentication dialog. You may need to unplug and then plug the device back in to see the dialog.
  • ADB hasn't whitelisted the manufacturer's vendor ID
    • Add it yourself or wait for the new version that removes the stupid whitelisting feature to be deployed.
  • Insufficient power supply
    • If you're using a USB hub, try a powered hub instead (one that comes with a separate AC adapter).
    • Even if you're using a powered hub, there might not actually be enough power for all ports simultaneously. Get a better hub or use fewer ports.
    • Your device is too power hungry, can happen with tablets. Get a better hub.
  • Insufficient USB host controller resources
    • On Linux, use dmesg to check for this error
    • If you've only got 9-12 devices connected and an Intel (Haswell) processor, it's most likely an issue with the processor. If your BIOS has an option to disable USB 3.0, that might help. If not, you're screwed and must get a PCIE extension card with onboard controllers.
  • Your powered USB hub does not support the device
  • The USB cable is bad
    • It happens. Try another one.
  • The USB hub is broken
    • This, too, happens. Just try a new one.
  • The device might not have a unique USB serial number, causing STF to overwrite the other device instead
    • This has never happened to us so far, but we do have one dirt-cheap Android 4.4 device whose serial number is the wonderfully unique "0123456789ABCDEF". Presumably if we had more than one unit we would have a problem.

A device that was previously connected no longer shows up in the list.

Again, there can be various reasons for this behavior as well. Some common reasons are:

  • The device ran out of power
    • You can see the last reported power level in the device list, unless there was a lengthy power outage preventing the battery level from being reported.
  • Someone accidentally disabled USB debugging remotely
    • Yes, it happens.
  • An OS update disabled USB debugging
    • Yes, it happens. Especially on Fire OS.
  • Someone touched the USB cable just the wrong way causing a disconnection
    • Happens easily.
  • Your PCIE USB extension card died
    • Yes, it happens.
  • Temporary network issues
    • Can't help with that.
  • Someone removed the device physically.
    • Or that.
  • You're on Mac OS
    • There's a bug in ADB's Mac OS implementation that causes devices to be lost on error conditions. The problem is more pronounced when using USB hubs. You have to unplug and then plug it back in again.
  • The USB hub broke
    • Happens. Just try a new one.

Remote debugging (i.e. adb connect) disconnects while I'm working.

If you're using STF locally, the most common cause is that you're not filtering the devices STF is allowed to connect to. The problem is that once you do adb connect, STF sees a new device and tries to set it up. Unfortunately since it's already connected via USB, setting up the new device causes the worker process handling the original USB device to fail. This is not a problem in production, since the devices should be connected to an entirely different machine anyway. For development it's a bit inconvenient. What you can do is give stf local a list of serials you wish to use. For example, if your device's serial is 0123456789ABCDEF, use stf local 0123456789ABCDEF. Now you can use adb connect and STF will ignore the new device.

There's another likely cause if you're running STF locally. Even if you whitelist devices by serial in STF, your IDE (e.g. Android Studio) doesn't know anything about that. From the IDE's point of view, you have two devices connected. When you try to run or debug your application, Android Studio suddenly notices that two devices are now providing JDWP connections and tries to connect to them both. This doesn't really work since the debugger will only allow one simultaneous connection, which causes problems with ADB. It then decides to disconnect the device (or sometimes itself) entirely.

One more sad possibility is that your Android Studio likes to restart ADB behind the scenes. Even if you restart ADB, USB devices will soon reappear as they're still connected. The same is not true for remote devices, as ADB never stores the list anywhere. This can sometimes also happen with the Android Device Monitor (monitor).

Recommended hardware

This is a list of components we are currently using and are proven to work.

PC components

These components are for the PC where the USB devices are connected. Our operating system of choice is CoreOS, but any other Linux or BSD distribution should do fine. Be sure to use reasonably recent kernels, though, as they often include improvements for the USB subsystem.

Our currently favorite build is as follows. It will be able to provide 28 devices using powered USB hubs, and about 10 more if you're willing to use the motherboard's USB ports, which is usually not recommended for stability reasons. Note that our component selection is somewhat limited by their availability in Japan.

Component Recommendation How many
PC case XIGMATEK Nebula x1
Motherboard ASUS H97I-PLUS x1
Processor Intel® Core™ i5-4460 x1
PSU Corsair CX Series™ Modular CX430M ATX Power Supply x1
Memory Your favorite DDR3 1600 MHz 8GB stick x1
SSD A-DATA Premier Pro SP900 64GB SSD x1
USB extension card StarTech.com 4 Port PCI Express (PCIe) SuperSpeed USB 3.0 Card Adapter w/ 4 Dedicated 5Gbps Channels - UASP - SATA / LP4 Power x1
USB hub Plugable USB 2.0 7 Port Hub with 60W Power Adapter x4
MicroUSB cable Monoprice.com 1.5ft USB 2.0 A Male to Micro 5pin Male 28/24AWG Cable w/ Ferrite Core (Gold Plated) x28

You may also need extension cords for power.

Alternatively, if you find that some of your older devices do not support the recommended hub, you may wish to mix the hub selection as follows:

Component Recommendation How many
USB hub Plugable USB 2.0 7 Port Hub with 60W Power Adapter x2
USB hub for older devices System TALKS USB2-HUB4XA-BK x2-4

You can connect up to two of the older hubs (providing up to 8 devices total) directly to the motherboard without exhausting USB host controller resources.

We also have several "budget builds" with an MSI AM1I motherboard and an AMD Athlon 5350 4-core processor. These builds, while significantly cheaper, sometimes completely lose the USB PCIE extension cards, and even a reboot will not always fix it. This may normally be fixable via BIOS USB settings, but unfortunately the budget motherboard has a complete lack of any useful options. Fortunately the AMD processor does not share Intel's Haswell USB host control resource problem, so you can also just connect your hubs to the motherboard directly if you don't mind sharing the root bus.

Below is an incomplete list of some of the components we have tried so far, including unsuitable ones.

Tested equipment

Note that our hardware score ratings only reflect their use for the purposes of this project, and are not an overall statement about the quality of the product.

USB extension cards
Name Score Short explanation
StarTech.com 4 Port PCI Express (PCIe) SuperSpeed USB 3.0 Card Adapter w/ 4 Dedicated 5Gbps Channels - UASP - SATA / LP4 Power 9/10 Reliable, well supported chipset and good power connections
StarTech.com 4 Independent Port PCI Express USB 2.0 Adapter Card 8/10 Reliable
玄人志向 USB3.0RX4-P4-PCIE 4/10 Well supported chipset but breaks VERY easily

Our current recommendation is StarTech.com's PEXUSB3S44V. It provides an independent Renesas (allegedly Linux-friendliest) µPD720202 host controller for each port. Another option from the same maker is PEXUSB400, which also works great but may offer slightly less future proofing.

Our 玄人志向 USB3.0RX4-P4-PCIE cards have been nothing but trouble and we've mostly phased them out by now. Chipset-wise it's pretty much the same thing as StarTech's offering, but the SATA power connector is awfully flimsy and can actually physically break off. The card is also incredibly sensitive to static electricity and will permanently brick itself, which happened on numerous occasions.

USB hubs
Name Score Short explanation
Plugable USB 2.0 7 Port Hub with 60W Power Adapter 8/10 High power output, high reliability
Plugable USB 3.0 7-port Charging Hub with 60W Power Adapter 5/10 High power output, low reliability
System TALKS USB2-HUB4XA-BK USB 2.0 hub with power adapter 7/10 High power output on two ports which complicates device positioning, low port count
Anker USB 3.0 9-Port Hub + 5V 2.1A Charging Port 2/10 High port count, insufficient power
ORICO P10-U2 External ABS 10 Port 2.0 USB HUB for Laptop/Desktop-BLACK 3/10 High port count, insufficient power
ORICO BH4-U3-BK ABS 4 Port USB3.0 BC1.2 Charging HUB with 12V3A Power Adapter-BLACK 5/10 High power output, low reliability

The best hub we've found so far is Plugable's USB 2.0 7 Port Hub with 60W Power Adapter. It's able to provide 1.5A per port for Battery Charging spec compliant devices, which is enough to both charge and sync even tablets (although charging will not occur at maximum speed, but that's irrelevant to us). Note that even devices that are not compliant will usually charge and sync just fine, albeit slower. The more recent USB 3.0 version has proven unreliable with the rest of our components, causing the whole hub to disconnect at times. Annoyingly the ports face the opposite direction, too. Note that ORICO also provides hubs that are identical to Plugable's offerings, the latter of which seem to be rebrands.

Unfortunately Plugable's USB 2.0 hub is not perfect either, at least for our purposes. It includes a physical on/off switch which can be especially annoying if your devices are in a regular office with occasional scheduled power outages. This will shut down the PC too, of course, but the problem is that once power comes back online, the hubs will be unable to switch themselves on and the devices won't charge, leading you to find a bunch of dead devices the next Monday.

The System TALKS USB 2.0 hub is very reliable, but has a few annoying drawbacks. First, the power adapter only provides power to two of its four ports, while the other two are powered by the host PC. The problem with this approach is that you must figure out which devices are power hungry yourself and put them on the ports with higher current. This can complicate device setup/positioning quite a bit. Another drawback is that if the host PC is turned off, only the powered ports will keep charging the connected devices. However, the hub is amazingly compatible with pretty much anything, making it the top choice for older devices that do not support the Battery Charging hubs.

Most powered USB 3.0 hubs we've tested have had a serious problem: the whole hub occasionally disconnected. This may have been caused by the specific combination of our components and/or OS, but as of yet we don't really know. Disabling USB 3.0 may help if you run into the same problem.

Translating

Currently STF UI is available in English and Japanese.

If you would like translate to any other language, please contribute in the STF Transifex project.

For updating the source and all the translation files first you have to install the Transifex client.

Then just run:

gulp translate

It will do the following:

  1. Convert all the jade files to html.
  2. Extract with gettext all translatable strings to stf.pot.
  3. Push stf.pot to Transifex.
  4. Pull from Transifex all po translations.
  5. Compile all po files to json.

Then in order to add it officially (only needs to be done once):

  1. Add the language to res/common/lang/langs.json.
  2. Pull the specific language tx pull -l <lang>.
  3. Run gulp translate.

Testing

See TESTING.md.

Contributing

See CONTRIBUTING.md.

License

See LICENSE.

Copyright © 2017 The OpenSTF Project. All Rights Reserved.

Comments
  • 'Failed to authenticate to ...' error with ADB connect command (ADB version 1.0.40 4986621)

    'Failed to authenticate to ...' error with ADB connect command (ADB version 1.0.40 4986621)

    What is the issue or idea you have? Using the latest version of ADB (1.0.40 4986621), the adb connect command return an error like Failed to authenticate to 10.193.14.128:15005, although the device has been well connected, it is confirmed by running adb devices -land adb shell commands, so it is not a blocking issue.

    Note this error message does not appear while connecting directly to a device configured with a adb tcpip 5555 command, neither with lower version of ADB.

    At stf-provider side, the ADB version is 1.0.36 but a I made also a test with an 1.0.40 version and the issue remains.

    So, it seems the problem is perhaps located at stf-provider side using adbkit.

    Does it only happen on a specific device? Please run adb devices -l and paste the corresponding row. no device specific, but ADB specific from 1.0.40 4986621 version.

    Please provide the steps to reproduce the issue. see above.

    What is the expected behavior? ADB should return a message like connected to 10.193.14.128:15005

    Do you see errors or warnings in the stf local output? If so, please paste them or the full log here. No, just an info message like New remote ADB connection from ::ffff:10.193.14.11

    Please run stf doctor and paste the output here.

    [email protected]:~/stf-master$ stf doctor
    2018-10-29T09:40:24.221Z INF/cli:doctor 7077 [*] OS Arch: x64
    2018-10-29T09:40:24.224Z INF/cli:doctor 7077 [*] OS Platform: linux
    2018-10-29T09:40:24.224Z INF/cli:doctor 7077 [*] OS Platform: 3.16.0-4-amd64
    2018-10-29T09:40:24.225Z INF/cli:doctor 7077 [*] Using Node 8.9.3
    2018-10-29T09:40:24.240Z INF/cli:doctor 7077 [*] Using ZeroMQ 4.0.5
    2018-10-29T09:40:24.252Z INF/cli:doctor 7077 [*] Using ADB 1.0.36
    2018-10-29T09:40:24.253Z ERR/cli:doctor 7077 [*] ProtoBuf is not installed (`protoc` is missing)
    2018-10-29T09:40:24.269Z INF/cli:doctor 7077 [*] Using GraphicsMagick 1.3.20
    2018-10-29T09:40:24.323Z INF/cli:doctor 7077 [*] Using RethinkDB 2.3.6~0jessie
    [email protected]:~/stf-master$
    
    opened by denis99999 30
  • IOS Support

    IOS Support

    Is your feature request related to a problem? Please describe. There are a variety of currently existing implementations of IOS support for OpenSTF. One of them is https://github.com/tmobile/stf_ios_support There are others also. None of their code has been accepted into the openstf namespace, with the exception of the https://github.com/openstf/ios-minicap

    It seems weird that there is neither a branch nor any code in the OpenSTF namespace to begin working on IOS support with other users/contributors to OpenSTF.

    I'm concerned that the commerically running contributors / sponsors are intentionally ignoring IOS support as they want to prevent a free version from working well and being widely available/understood.

    If that is not the case, I would like to start getting IOS support upstreamed; at the very least in a branch. If discussions on how to do this need to happen first, lets begin having those discussions.

    If it is the case that the core contributors / sponsors refuse to support IOS or allow development to continue in an open collective way on the openstf namespace, then that should be stated clearly so that an effort to do that can be done elsewhere.

    Describe the solution you'd like Do one of the following:

    1. Say that openstf namespace refuses to support IOS ( then it can continue elsewhere )
    2. Say that openstf namespace wants IOS support but wants to have conversation about how to go about it properly first ( and have that conversation here in this new issue rather than on the existing huge issue full of technical conversation )
    3. Say that openstf namespace wants IOS support, and decide on a branch and begin letting PRs go into it so that work can begin in the namespace.
    4. Something else that allows work to happen as a community.

    Describe alternatives you've considered

    1. Starting a fork of OpenSTF entirely and driving the community to that, away from the openstf namespace. ( I don't want to see this happen; as the OpenSTF project is great and the community should stick together in the same place )
    2. Starting other Wikis / webpages to develop the IOS STF efforts there, without involving the main OpenSTF project. ( I don't like this solution, because it will lead to a fragmented ecosystem of developers on OpenSTF and over time could lead to project divergence )

    Additional context I think what I'm asking for is clear with the above info? If not would be happy to address any questions and/or start conversation about this.

    P.S. I and my fellow coworkers love OpenSTF and appreciate it's existence and the work that goes into it. ❤️

    feature_request 
    opened by nanoscopic 29
  • STF Authentication

    STF Authentication

    HI,

    I have been trying to connect stf through its ldap Module. I am passing all the req. parametres but still not able to connect. Below is the command

    stf local --public-ip 10.11.215.37 --auth-type ldap --auth-options '["--ldap-url","10.11.200.201","--port","3268","--ldap-search-dn"," CN=Users,DC=ibtechnology,DC=com","--ldap-bind-dn","DC=ibtechnology,DC=com","--app-url","Mail.incedoinc.com"]'

    and after firing this I'm getting follwoing error...

    /usr/local/lib/node_modules/stf/node_modules/zmq/lib/index.js:324 throw err; ^

    /usr/local/lib/node_modules/stf/node_modules/zmq/lib/index.js:324 throw err; ^ Error: Address already in use at Socket.bindSync (/usr/local/lib/node_modules/stf/node_modules/zmq/lib/index.js:322:15) at module.exports (/usr/local/lib/node_modules/stf/lib/units/triproxy/index.js:21:7) at Command.program.command.description.option.option.option.option.option.option.option.option.option.option.option.option.action.require.port (/usr/local/lib/node_modules/stf/lib/cli.js:282:32) at Command.listener (/usr/local/lib/node_modules/stf/node_modules/commander/index.js:301:8) at Command.EventEmitter.emit (events.js:98:17) at Command.parseArgs (/usr/local/lib/node_modules/stf/node_modules/commander/index.js:615:12) at Command.parse (/usr/local/lib/node_modules/stf/node_modules/commander/index.js:458:21) at Object. (/usr/local/lib/node_modules/stf/lib/cli.js:1134:9) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:902:3 Error: Address already in use at Socket.bindSync (/usr/local/lib/node_modules/stf/node_modules/zmq/lib/index.js:322:15) at module.exports (/usr/local/lib/node_modules/stf/lib/units/triproxy/index.js:21:7) at Command.program.command.description.option.option.option.option.option.option.option.option.option.option.option.option.action.require.port (/usr/local/lib/node_modules/stf/lib/cli.js:282:32) at Command.listener (/usr/local/lib/node_modules/stf/node_modules/commander/index.js:301:8) at Command.EventEmitter.emit (events.js:98:17) at Command.parseArgs (/usr/local/lib/node_modules/stf/node_modules/commander/index.js:615:12) at Command.parse (/usr/local/lib/node_modules/stf/node_modules/commander/index.js:458:21) at Object. (/usr/local/lib/node_modules/stf/lib/cli.js:1134:9) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:902:3 FTL/cli:local 3995 [*] Child process had an error ExitError: Exit code "8" at ChildProcess. (/usr/local/lib/node_modules/stf/lib/util/procutil.js:49:23) at ChildProcess.EventEmitter.emit (events.js:98:17) at Process.ChildProcess._handle.onexit (child_process.js:797:12) INF/c

    opened by romitincedoinc 29
  • Device Booking feature

    Device Booking feature

    Overview

    This is Device booking feature. You can book device schedule on device-list. then, device scheduler unit set you to "owner" on the time. And reject other user if the device is busy. device scheduler will check device schedule per a minute.

    Note

    You can book schedule from one hour later.

    opened by hogehoge-banana 27
  • Connecting to RethinkDB

    Connecting to RethinkDB

    Sorry to keep spamming this forum, but I seem to be really close to having the complete system working. All services are in the green and everything seems to communicate like it should... Except for the database connection, so that's quite an important link I'm missing.

    Here's my setup:

    1. A Ubuntu Server 15 VM (192.168.99.107) running RethinkDB in a docker container, and an ambassador exposing it to the world.

    rethinkdb.service

    [Unit]
    Description=RethinkDB
    After=docker.service
    Requires=docker.service
    
    [Service]
    EnvironmentFile=/etc/environment
    TimeoutStartSec=0
    Restart=always
    ExecStartPre=/usr/bin/docker pull sorccu/rethinkdb:1.15.2
    ExecStartPre=-/usr/bin/docker kill %p
    ExecStartPre=-/usr/bin/docker rm %p
    ExecStart=/usr/bin/docker run --rm \
      --name %p \
      sorccu/rethinkdb:1.15.2
    ExecStop=-/usr/bin/docker stop -t 10 %p
    

    rethinkdb-ambassador.service

    [Unit]
    Description=RethinkDB ambassador
    After=docker.service
    Requires=docker.service
    
    [Service]
    EnvironmentFile=/etc/environment
    TimeoutStartSec=0
    Restart=always
    ExecStartPre=/usr/bin/docker pull openstf/ambassador:latest
    ExecStartPre=-/usr/bin/docker kill %p
    ExecStartPre=-/usr/bin/docker rm %p
    ExecStart=/usr/bin/docker run --rm \
      --name %p \
      --link rethinkdb:rethinkdb \
      -p 28015:28015 \
      openstf/ambassador:latest
    ExecStop=-/usr/bin/docker stop -t 10 %p
    
    1. A Ubuntu Server 15 VM (192.168.99.106) running the rest of the stf services, and a rethinkdb-proxy-28015.service to make the database connection

    rethinkdb-proxy-28015.service

    [Unit]
    Description=RethinkDB proxy/28015
    After=docker.service
    Requires=docker.service
    
    [Service]
    EnvironmentFile=/etc/environment
    TimeoutStartSec=0
    Restart=always
    ExecStartPre=/usr/bin/docker pull openstf/ambassador:latest
    ExecStartPre=-/usr/bin/docker kill %p
    ExecStartPre=-/usr/bin/docker rm %p
    ExecStart=/usr/bin/docker run --rm \
      --name %p \
      -e "AUTHKEY=1234" \
      -p 28015 \
      -e RETHINKDB_PORT_28015_TCP=tcp://192.168.99.107:28015 \
      openstf/ambassador:latest
    ExecStop=-/usr/bin/docker stop -t 10 %p
    

    To test it I try running the stf-migrate.service

    [Unit]
    Description=STF migrate
    After=rethinkdb-proxy-28015.service
    BindsTo=rethinkdb-proxy-28015.service
    
    [Service]
    EnvironmentFile=/etc/environment
    Type=oneshot
    ExecStartPre=/usr/bin/docker pull openstf/stf:latest
    ExecStartPre=-/usr/bin/docker kill %p
    ExecStartPre=-/usr/bin/docker rm %p
    ExecStart=/usr/bin/docker run --rm \
      --name %p \
      --link rethinkdb-proxy-28015:rethinkdb \
      openstf/stf:latest \
      stf migrate
    

    Now, from the client, I can do wget 192.168.99.107:28015 and receive the index.html explaining "this is a rethinkdb port, you are connecting wrong". So I know that the address is open and accessible, so the ambassador is working its part.

    However, trying to launch stf-migrate (or any other service connecting to the rethinkdb-proxy), this happens:

    Sep 09 10:34:08 ubuntu docker[17758]: INF/db 1 [*] Connecting to 172.17.7.85:28015
    Sep 09 10:34:08 ubuntu docker[17758]: INF/db 1 [*] Unable to connect to 172.17.7.85:28015
    Sep 09 10:34:08 ubuntu docker[17758]: FTL/db 1 [*] No hosts left to try
    Sep 09 10:34:08 ubuntu docker[17758]: FTL/util:lifecycle 1 [*] Shutting down due to fatal error
    Sep 09 10:34:09 ubuntu systemd[1]: stf-migrate.service: main process exited, code=exited, status=1/FAILURE
    

    So stf-migrate tries to connect to the rethinkdb-proxy-28015.service docker container, and fails. The problem seems to be entirely local on the second machine, since the ambassador seems to work perfectly. The services cannot connect to the proxy properly, but I cannot figure out where the problem comes from.

    opened by MichaelDepner 27
  • STF REST API (v2.0.0)

    STF REST API (v2.0.0)

    This PR implements RESTful APIs for STF which will make possible to use STF for test automation. Detailed discussion can be seen here

    In order to implement APIs, I did following things.

    • Created a new api unit
    • Used swagger to define apis
    • Moved all the current apis in app unit to new api unit
    • Authorisation using accessToken which can be creating from STF UI. Refer (https://github.com/openstf/stf/pull/190)

    API Documentation can be found here

    How to use these API's for test automation?

    Basic idea behind test automation is by using STF's remote debugging feature. By this feature you can remotely connect STF device to you machine(client). More about this feature

    How to connect device

    1. Get all the devices using GET /devices/ endpoint. You can also use fields query parameter to get only useful information such as GET /devices?fields=owner,ready. You can filter the usable device by filtering devices whose owner==null
    2. Next step will be to request a usable device from STF server. You can do this by sending a POST request to /user/devices endpoint with serial in request body. Since this request is going to be asynchronous, STF will return you a polling URL. You can use this polling url to check if device is added into your devices (group).
    3. Once device is added into your devices(/user/devices). You can ask STF server to start remote debugging using POST /user/devices/{serial}/remoteConnect endpoint. This will again return a polling url like /user/devices/{serial}. You can check if remoteConnect is finished by GET /user/devices/{serial}?fields=remoteConnect. If it is true, you can get remoteDebugUrl from device information i.e /user/devices/{serial}?fields=remoteDebugUrl. After getting this url you can use this url for remote connection and then you can run most of the automated test such as appium, calabash etc.
    4. Once test are over, don't forget to disconnect remote debug and release the device by DELETE /user/devices/{serial}/remoteConnect and DELETE /user/devices/{serial}

    NOTE

    Those who wants to try this branch, they can use npm install [email protected] or docker image docker pull openstf/stf:v2.0.0-beta

    opened by vbanthia-zz 26
  • Setup HTTPS for STF Local

    Setup HTTPS for STF Local

    Hello, I am trying to setup HTTPS for STF local using NGINX. I want to do it because STF is embedded inside my PHP code (which already be setup to work with HTTPS). Note that my STF setup works totally fine with normal HTTP URLs. I don't try the Docker setup as explained in the DEPLOYMENT document because I just need some simple setup like stf local. First, I prepare the following simple nginx configuration file and test it with a very simple node app running on port 7100, and it works -- an HTTPS URL directs me to the app.

    erver {
            listen 80; 
            listen [::]:80;
            listen       443 ssl;
            ssl_certificate example.crt;
            ssl_certificate_key example.key;
            root /var/www/html;
            # Add index.php to the list if you are using PHP 
            index index.php index.html index.htm index.nginx-debian.html;
    
            server_name example.com;
            location / { 
                    proxy_pass http://localhost:7100;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $http_host;
                    proxy_set_header X-Forwarded-Proto $scheme;
                    proxy_buffering off;
            }   
    }
    

    After that, to run STF Local with HTTPS I change all URLs starting with http to https in lib/cli/local/index.js and start OpenSTF by running stf local --public-ip=my public ip. However, when I type my URL (***.com) I got the following socket error in OpenSTF

    ERR/poorxy 19402 [*] Proxy had an error Error: socket hang up
        at TLSSocket.onHangUp (_tls_wrap.js:1117:19)
        at Object.onceWrapper (events.js:291:19)
        at emitNone (events.js:91:20)
        at TLSSocket.emit (events.js:186:7)
        at endReadableNT (_stream_readable.js:974:12)
        at _combinedTickCallback (internal/process/next_tick.js:74:11)
        at process._tickCallback (internal/process/next_tick.js:98:9)
    

    Since the NGINX conf. works well with the simple NodeJS app, I think the error comes from some incorrect setting/initialization for OpenSTF.

    Anyone has successfully set it up and know how to fix this issue? Your help will be greatly appreciated! Thanks

    opened by thuanpv 25
  • Android O compatibility

    Android O compatibility

    This is a tracking issue for Android O and will be kept open until the final version is released.

    Android O Developer Preview 3:

    Not working. Same status as Developer Preview 2.

    Android O Developer Preview 2:

    Not working. This is more trouble than usual, STFService.apk may need a somewhat large refactor. There are also symbol issues with minicap, the code running on Nexus 5X doesn't match the released android-o-preview-2 AOSP branch.

    Android O Developer Preview 1:

    The master branch works as of 43f0341297fea60de8f4dc30e922d9c343b359a1. Either use the openstf/stf:latest docker image or install from source.

    opened by sorccu 25
  • Using STF for Test Automation

    Using STF for Test Automation

    Hello guys,

    Thanks for this awesome tool. I had fun in setting up this locally and its quite useful for debugging my apps.

    The kind of feature I wish from STF is running UI Test Suites (Appium, Robotium, monkey runner etc) parallel on multiple devices similar to services such as testdroid, AWS Device Farm etc.

    For this, they provide a feature for creating custom device pool where user can create a device group of their target devices. Then you upload your apk file and test suites then they will run your test and provide test results. They also provide apis for these features which makes CI integration easier.

    I think it will be really helpful to have this kind of facility On-premises. It will give better control.

    I want to know if this feature or something similar to this, is in your roadmap? If it is, please share how you want to implement this. I will be glad to contribute :)

    Thanks,

    help wanted 
    opened by vbanthia-zz 24
  • Android N support

    Android N support

    I'v read the document of Android N. It says

    Android N includes namespace changes to prevent loading of non-public APIs. If you use the NDK, you should only be using public APIs from the Android platform. Using non-public APIs in the next official release of Android can cause your app to crash.

    http://developer.android.com/intl/zh-cn/preview/behavior-changes.html#ndk

    So, can STF still work on Android N ?

    thx.

    opened by risingsun03 23
  • XiaoMi5  fails on minitouch

    XiaoMi5 fails on minitouch

    INF/device:plugins:touch 4553 [7d068e69] Launching screen service INF/device:plugins:touch 4553 [7d068e69] Connecting to minitouch service INF/device:plugins:touch 4553 [7d068e69] minitouch says: "open: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event8 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event7 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event6 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/mouse2 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event3 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/mouse0 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event1 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event0 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/mice for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event5 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event4 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/mouse1 for inspectionopen: Permission denied" INF/device:plugins:touch 4553 [7d068e69] minitouch says: "Unable to open device /dev/input/event2 for inspectionUnable to find a suitable touch device" WRN/device:plugins:touch 4553 [7d068e69] Shell keeping minitouch running ended unexpectedly

    device specific 
    opened by scottchejin 22
  • Bump passport-saml from 0.15.0 to 3.2.2

    Bump passport-saml from 0.15.0 to 3.2.2

    Bumps passport-saml from 0.15.0 to 3.2.2.

    Release notes

    Sourced from passport-saml's releases.

    v3.2.2

    • Merge pull request from GHSA-m974-647v-whv7 (8b7e3f5)

    v3.2.1

    • deps: upgrade release-it, npm dedupe (8f3ffcd)
    • deps: npm audit fix (b81c36c)
    • Export AuthenticateOptions type (#657) (ef1dcfc)
    • test: update error message to match new xml-encryption format. (3e908fa)
    • Update xml-encryption to get rid of vulnerable node-forge (#667) (b9de63b)

    v3.2.0

    • Update dependencies (#640) (e21a04b)

    v3.1.2

    • Update xmldom to 0.7.2 (#633) (9aef839)

    v3.1.1

    • Patch algorithm definitions (#625) (d782971)

    v3.1.0

    • Limit transforms for signed nodes (#595) (f1e00b6)
    • Add assertion attributes to child object on profile (#593) (2a1699b)
    • Rebuild changelog for 3.0.0 (#605) (c7b7226)
    • Fix typo OnBefore -> NotBefore (#611) (522fe1d)
    • Update README with new Cache Provider interface (#608) (8cc0d8e)
    • Fix validateInResponseTo null check (#596) (bf41764)

    v3.0.0

    Important Release Notes

    This release has some breaking changes and some significant refactors. Please read the CHANGELOG.md carefully to note what few things may need to change in your code before taking this version. There are deprecation notices in the latest 2.x releases, so it is strongly advised that you upgrade to those versions and clear up the warnings before taking this release.

    Also, this release contains significant work to separate the SAML parts out from the Passport parts in preparation for a complete split of these two parts. If you are using the SAML part apart from the Passport part, this release will be much easier for you to use.

    Changes

    • Remove deprecated field privateCert from README, tests (#591) (4eff276)
    • Add support for more tags in the changelog (#592) (6a7e476)
    • Create codeql-analysis.yml (52ede4c)
    • Improve changelog format (#587) (2d2cc0a)
    • Update all dependencies to latest (d34b22f)
    • Add Node 16 support; drop Node 10 (b0caa65)
    • Update all packages to latest semver-minor (#588) (13c7216)
    • Enforce more secure XML encryption (#584) (8d35454)
    • Add optional setting to set a ceiling on how old a SAML response is allowed to be (#577) (54a1e04)
    • Move XML functions to utility module (#571) (9ad5662)
    • Improve the typing of the Strategy class hierarchy. (#554) (4a83196)
    • Resolve XML-encoded carriage returns during signature validation (#576) (5618b65)
    • Make sure CI builds test latest versions of dependencies (#570) (0798e4d)
    • Start separation of node-saml from passport-saml strategy (#574) (c668737)

    ... (truncated)

    Changelog

    Sourced from passport-saml's changelog.

    Changelog

    master (2022-09-10)

    🔗 Dependencies:

    • [javascript] Bump concurrently from 7.3.0 to 7.4.0 #773
    • [javascript] Bump @​types/node from 14.18.22 to 14.18.28 #772
    • [javascript] Bump @​types/passport from 1.0.9 to 1.0.10 #771
    • [javascript] Bump @​typescript-eslint/eslint-plugin from 5.30.7 to 5.36.2 #766
    • [javascript] Bump eslint from 8.20.0 to 8.23.0 #759
    • [javascript] Bump concurrently from 7.2.2 to 7.3.0 #741
    • [javascript] Bump @​typescript-eslint/parser from 5.30.7 to 5.36.2 #767
    • Update node-saml dependency #770
    • [javascript] Bump @​types/node from 14.18.21 to 14.18.22 #740
    • [javascript] Bump @​typescript-eslint/parser from 5.30.5 to 5.30.7 #737
    • [javascript] Bump eslint from 8.19.0 to 8.20.0 #736
    • [javascript] Bump @​types/sinon from 10.0.12 to 10.0.13 #738
    • [javascript] Bump ts-node from 10.8.2 to 10.9.1 #732
    • [javascript] Bump @​typescript-eslint/eslint-plugin from 5.30.5 to 5.30.7 #739
    • [javascript] Bump parse-url from 6.0.0 to 6.0.2 #730
    • [javascript] Bump @​typescript-eslint/parser from 5.30.3 to 5.30.5 #726
    • [javascript] Bump eslint-plugin-prettier from 4.0.0 to 4.2.1 #722
    • [javascript] Bump eslint from 8.18.0 to 8.19.0 #719
    • [javascript] Bump @​typescript-eslint/eslint-plugin from 5.30.3 to 5.30.5 #725
    • [javascript] Bump ts-node from 10.8.0 to 10.8.2 #723
    • [javascript] Bump @​typescript-eslint/eslint-plugin from 5.29.0 to 5.30.3 #716
    • [javascript] Bump @​types/sinon from 10.0.11 to 10.0.12 #717
    • [javascript] Bump @​typescript-eslint/parser from 5.29.0 to 5.30.3 #718
    • [github_actions] Bump actions/checkout from 2 to 3 #713
    • [github_actions] Bump github/codeql-action from 1 to 2 #712

    📚 Documentation:

    • Update badges for scoped package #710
    • Update badges for scoped package #709
    • docs: move history note to the bottom and expand it. #708

    ⚙️ Technical Tasks:

    • Have dependabot update package.json too #724
    • Reduce dependabot update frequency #765
    • Have dependabot update package.json too #764
    • Add dependabot config file #711

    v4.0.0-beta.1 (2022-06-25)

    💣 Major Changes:

    ... (truncated)

    Commits
    Maintainer changes

    This version was pushed to npm by cjbarth, a new releaser for passport-saml since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump jszip from 3.2.2 to 3.10.1

    Bump jszip from 3.2.2 to 3.10.1

    Bumps jszip from 3.2.2 to 3.10.1.

    Changelog

    Sourced from jszip's changelog.

    v3.10.1 2022-08-02

    • Add sponsorship files.
      • If you appreciate the time spent maintaining JSZip then I would really appreciate your sponsorship.
    • Consolidate metadata types and expose OnUpdateCallback #851 and #852
    • use const instead var in example from README.markdown #828
    • Switch manual download link to HTTPS #839

    Internals:

    • Replace jshint with eslint #842
    • Add performance tests #834

    v3.10.0 2022-05-20

    • Change setimmediate dependency to more efficient one. Fixes Stuk/jszip#617 (see #829)
    • Update types of currentFile metadata to include null (see #826)

    v3.9.1 2022-04-06

    • Fix recursive definition of InputFileFormat introduced in 3.9.0.

    v3.9.0 2022-04-04

    • Update types JSZip#loadAsync to accept a promise for data, and remove arguments from new JSZip() (see #752)
    • Update types for compressionOptions to JSZipFileOptions and JSZipGeneratorOptions (see #722)
    • Add types for generateInternalStream (see #774)

    v3.8.0 2022-03-30

    • Santize filenames when files are loaded with loadAsync, to avoid "zip slip" attacks. The original filename is available on each zip entry as unsafeOriginalName. See the documentation. Many thanks to McCaulay Hudson for reporting.

    v3.7.1 2021-08-05

    • Fix build of dist files.
      • Note: this version ensures the changes from 3.7.0 are actually included in the dist files. Thanks to Evan W for reporting.

    v3.7.0 2021-07-23

    • Fix: Use a null prototype object for this.files (see #766)
      • This change might break existing code if it uses prototype methods on the .files property of a zip object, for example zip.files.toString(). This approach is taken to prevent files in the zip overriding object methods that would exist on a normal object.

    v3.6.0 2021-02-09

    • Fix: redirect main to dist on browsers (see #742)
    • Fix duplicate require DataLengthProbe, utils (see #734)
    • Fix small error in read_zip.md (see #703)

    v3.5.0 2020-05-31

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Why root admin is only able to see the main default froup ? is there a way to make other admin to see default group ?

    Why root admin is only able to see the main default froup ? is there a way to make other admin to see default group ?

    Hey ,

    I observed that a root admin is only able to see the default group (Example : 'common') but other admins are not able to see this root group or group created by other admins . So i have a two part question.

    1. is there a way to make multiple root admins ?
    2. how to make the root default group visible to users who all have admin privileges ?
    opened by Ramnirmal0 0
  • Bump moment from 2.18.1 to 2.29.4

    Bump moment from 2.18.1 to 2.29.4

    Bumps moment from 2.18.1 to 2.29.4.

    Changelog

    Sourced from moment's changelog.

    2.29.4

    • Release Jul 6, 2022
      • #6015 [bugfix] Fix ReDoS in preprocessRFC2822 regex

    2.29.3 Full changelog

    • Release Apr 17, 2022
      • #5995 [bugfix] Remove const usage
      • #5990 misc: fix advisory link

    2.29.2 See full changelog

    • Release Apr 3 2022

    Address https://github.com/moment/moment/security/advisories/GHSA-8hfj-j24r-96c4

    2.29.1 See full changelog

    • Release Oct 6, 2020

    Updated deprecation message, bugfix in hi locale

    2.29.0 See full changelog

    • Release Sept 22, 2020

    New locales (es-mx, bn-bd). Minor bugfixes and locale improvements. More tests. Moment is in maintenance mode. Read more at this link: https://momentjs.com/docs/#/-project-status/

    2.28.0 See full changelog

    • Release Sept 13, 2020

    Fix bug where .format() modifies original instance, and locale updates

    2.27.0 See full changelog

    • Release June 18, 2020

    Added Turkmen locale, other locale improvements, slight TypeScript fixes

    2.26.0 See full changelog

    • Release May 19, 2020

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Screenshots and files will not be uploaded.

    Screenshots and files will not be uploaded.

    image image image image image

    The screenshot / file upload does not work as shown in the attached picture. We checked the related issues, but it was difficult to find an accurate answer to how to solve them.

    Please give us your opinion. Thank you.

    opened by nalawa-yoon 0
Releases(v3.4.2)
  • v3.4.2(May 31, 2020)

    3.4.2 (2020-05-31)

    Fixes

    • Fixed SAML_ID_PROVIDER_CERT_PATH in example SAML auth provider unit #1061. Thanks @mitchtech!
    • Fixed Chinese characters handling #1204. Thanks @xu-duqing!

    Enhancements

    • Updated STFService.apk, minitouch and minicap to support Android 10. Thanks @denis99999 and @pcrepieux!
    • Added addAdbPublicKey endpoint #770. Thanks @neofreko!
    • Added pt_BR translation #1038. Thanks @esmiralha!
    • Added market name to device properties #1002.
    • Added group feature #1056. Thanks @denis99999!
    • Added validation for filter.pid/ filter.tid/ filter.data input objects #1074. Thanks @lukzeg!
    • Added opening device view via reselecting device from device view #1077. Thanks @lukzeg!
    • Added device logs separation #1095. Thanks @lukzeg!
    • Updated NodeJS to 8.9.3 #1169.
    • Added alternative dockerfiles for armhf and x86_64 architectures #1174, #1191. Thanks @denis99999 and @petemyron!
    • Added touchMove error handling #1189. Thanks @att55!
    Source code(tar.gz)
    Source code(zip)
  • v3.4.1(May 3, 2019)

    3.4.1 (2019-05-03)

    Fixes

    • Updated adbkit-apkreader to fix an APK manifest parsing issue on applications processed by 360 encryption services, which changes the application key to com.stub.StubApp. Thanks @JChord!
    • Updated adbkit to public key parsing on recent versions of ADB. Thanks @codeskyblue!

    Enhancements

    • Exposed the ZMQ_IPV6 environment variable, making it possible to enable IPv6 for ZeroMQ. Thanks @aokhotin!
    Source code(tar.gz)
    Source code(zip)
  • v3.4.0(Aug 8, 2018)

    3.4.0 (2018-08-09)

    Enhancements

    • Android 9.0 is now supported. This feature was sponsored by HeadSpin.
    • The OAuth2 unit now supports state tokens. Thanks @quangola!
    • STFService.apk can now display the identity activity (red screen) automatically if a device gets disconnected from USB (or ADB), which can make maintenance easier. This feature is in beta, please enable it by running adb shell pm grant jp.co.cyberagent.stf android.permission.DUMP on the devices you want to try it on. Thanks @Malinskiy!

    Fixes

    • Use ps -lef instead of ps to list pids on Android 8.x. In new versions, ps doesn't return anything. Thanks @thinkhy!
    Source code(tar.gz)
    Source code(zip)
  • v3.3.1(Jul 14, 2018)

    3.3.1 (2018-07-14)

    Fixes

    • Fixed ADB's new device states (connecting, authorizing) not being recognized by STF. Thanks @obrie!
    • Updated STFService.apk to fix an issue on high aspect ratio devices like the Mi Mix 2 where a portion of the screen may not have been visible.
    • Updated adbkit-apkreader to resolve issues with certain APK files that were unparseable and therefore could not be installed. The issue was with long strings in the manifest file.
    • Updated minitouch to fix touch detection issues on Meizu Pro7 Plus.
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(Mar 24, 2018)

    3.3.0 (2018-03-25)

    Enhancements

    • Added a new column to the device list that displays the OpenGL ES version of each device. Note that you may have to reset the columns once if you can't see it. Thanks @koral--!
    • Added a new --no-screen-reset option to disable the default behavior of resetting rotation and returning to the home screen after a user stops using a device. Thanks @0rzech!
    • Added a new --saml-id-provider-callback-url option to the auth-saml2 unit. Thanks @0rzech!

    Fixes

    • Fixed a setup issue with TPS650.
    • Fixed an issue where most uploads would fail due to a breaking configuration change in a dependency.
    • Updated minitouch to fix multitouch issues on some devices that require the BTN_TOUCH kernel event. Lifting a contact while having and keeping one held down may have prevented any events from being processed until a new touchdown event.
    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Dec 6, 2017)

    3.2.0 (2017-12-06)

    Enhancements

    • Android 8.1 is now supported.
    • The network column in the device list is now based on a value that gets updated in real time. The format of the column has changed slightly due to this change.
    • The --mute-master option now accepts the values never (default), inuse (only when a device is being used), and always (mute pre-emptively during setup phase). For backwards compatibility, --mute-master with no value maps to inuse, and --no-mute-master to never.
    • The battery level and battery temperature columns are now filterable with comparison operators.
    • Log output now includes a timestamp.

    Fixes

    • Fixed an issue on Windows where our device binaries may have failed to install due to an Out of fallback locations error caused by a faulty mode check. Thanks @iqianxing!
    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Aug 30, 2017)

    3.1.0 (2017-08-31)

    Enhancements

    • Android 8.0 is now supported. Please note that Android O developer previews are no longer officially supported, though they may or may not still work.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.1(Aug 21, 2017)

  • v3.0.0(Aug 9, 2017)

    3.0.0 (2017-08-09)

    Enhancements

    • Added support for Android O Developer Preview 1 (note that any later previews are not supported yet)
    • You can now set screen JPEG quality with the SCREEN_JPEG_QUALITY environment variable at launch time. Can be useful for slow networks.
    • Switched to yargs for option parsing to make it easier to modify the CLI.
    • Almost all command line options can now be specified with environment variables.
    • Internal commands are now hidden from help output but can still be used.
    • Running the stf binary without a command now errors and shows help output (previously there was no output whatsoever).
    • Improved help messages for various options.
    • Added an app switch key. Thanks @koral--!

    Fixes

    • Fixed Lenovo A806 and most likely other cheap Lenovo devices as well by updating adbkit.
    • Fixed ZUK Z1, Z2 and others by adding an alternate install location for our binaries, since /data/local/tmp is mounted as noexec on those devices. Thanks @dkw72n!
    • Updated adbkit-apkreader to resolve issues with certain APK files that were unparseable and therefore failed installation. We've only seen a single a single APK with this issue, but there could be more.
    • Updated adbkit-apkreader to resolve another unrelated parsing issue with slightly malformed manifest files.
    • Updated adbkit to resolve an issue where trailing spaces in an adb public key would cause an error during adb connect.
    • Updated adbkit to resolve issues with log parsing on Android 7.0 and later, caused by Android no longer transforming \n to \r\n.
    • Updated adbkit to resolve an issue with recent versions of ADB that include a null byte in adbkey.pub, which was causing validation to fail.
    • Fixed minitouch on Blackberry PRIV.

    Misc

    • We now use please-update-dependencies to check for outdated dependencies when running from source. It's a super quick local check that compares package.json with installed dependencies. Should help avoid unnecessary issues caused by forgetting to run npm install after git pull.

    Breaking changes

    • Node v6.9.x or later is now required. Earlier versions will not work. To avoid a sudden flood of issues about this change, please-update-dependencies enforces the minimum version and tells you if you need to update.
    • The -C shortcut for the --no-cleanup option has been removed due to the switch to yargs. Please use the full --no-cleanup option instead.
    • Although likely not used by anyone, it was possible to give multiple ZeroMQ endpoints to options such as --connect-push by separating them with commas. This is still possible but now works in a different way due to the switch to yargs. Comma-separated hosts in a single value are no longer accepted. If you need to specify multiple hosts, simply use the option as many times as you like. This change is unlikely to have any impact whatsoever on most users.
    • The --devices option of stf doctor has been removed due to unnecessary complexity.
    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Nov 9, 2016)

    2.3.0 (2016-11-09)

    Minor release addressing the following:

    Fixes

    • Fixed minicap on various devices running Android 4.2, incl. Qumo Quest 405, Yoga Tablet 8 etc. There may still be some that do not work, as 4.2 was customized pretty heavily by some makers. Thanks to @dkw72n for tracking down the issue and coming up with a fix! And as always, please let us know if you find any device (running any Android version) that does not work.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Nov 8, 2016)

    2.2.0 (2016-11-09)

    Minor release addressing the following:

    Fixes

    • Fixed minicap on some/all Samsung devices running Android 5.1.1, which did not work previously. Thanks to @dkw72n for tracking down the issue and coming up with a fix!

    Misc

    • The openstf/stf-armv7l Docker image is being built again. Our previous armv7l build server died and Scaleway did not have more available until recently.
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Oct 23, 2016)

    Changelog

    2.1.0 (2016-10-24)

    Minor release addressing the following:

    Enhancements

    • Android 7.1 support!

    Fixes

    • STFService.apk now uses abstract sockets instead of TCP sockets. This fixes stability issues with devices connected in RNDIS mode.
    • Updated adbkit to fix logcat issues on newer Android versions.
    • General reliability improvements in adbkit.
    • Fixed minitouch on Alcatel Idol 3.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Jul 28, 2016)

  • v1.2.0(Jul 21, 2016)

    Changelog

    1.2.0 (2016-07-22)

    Minor release addressing the following:

    Enhancements

    • Added Android N Developer Preview 5 support (earlier only available by building from master).
    • Added an easier to access button to stop using a device from the control screen. Thanks @miss0110!
    • Updated the official Docker image to Ubuntu 16.04 and Node v6.3.0.
    • Added a --no-cleanup option to disable the default behavior of apps getting cleaned up automatically when a user stops using the device.
    • Added ESLint rules for easily checking pull requests.
    • Added a Slack notifier unit.
    • Added an stf doctor command to check and output external dependencies. Very useful for issues.
    • Added an OpenID auth unit. Thanks @codeskyblue!
    • Added optional HTTP Basic auth to the mock auth unit, for when you can't set up a proper auth adapter but still want at least a tiny bit of added security.
    • Considerably smaller and up to date official Docker image for armv7l with automated nightly builds on Scaleway. May occasionally break for a while but we aim to always keep it fully up to date.
    • Added instructions for using Google OAuth 2.0 login to the deployment guide, making it possible to sign in using your Google account.
    • Added a configurable username field to the LDAP auth unit. Thanks @bananayong!
    • Updated and added various translations.

    Fixes

    • Fixed screen area not being visible in latest versions of Chrome.
    • Fixed Meizu Note 2 and similar devices which did not work due to non-standard output.
    • Fixed ports getting leaked causing the provider unit to completely run out of ports if devices die a lot. Thanks @skyline-gleb!
    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Jan 13, 2016)

  • v2.0.0-beta(Jan 4, 2016)

  • v1.1.0(Jan 4, 2016)

    Minor release addressing the following:

    Enhancements

    • Android 6.0 support
    • Added translation support for Chinese, Korean, Russian and Spanish
    • Added File Explorer feature in device controller where you can access device file system
    • Added optional storage-s3 unit which can store storage data in Amazon S3 bucket instead of local
    • Now, "Notes" column of device list is editable.
    • Experimental armv7l support
    • Added stf-setup-examples using Vagrant and Virtual Box

    Fixes

    Source code(tar.gz)
    Source code(zip)
Owner
STF
Smartphone Test Farm
STF
Setup CheckStyle, FindBugs, PMD and Lint for your Android project easily

android-quality-starter setup CheckStyle, FindBugs, PMD and Lint for your Android project easily This project adds gradle setup for quality tools ment

Piotr Wittchen 29 Sep 27, 2022
Easily scale your Android Instrumentation Tests across Firebase Test Lab with Flank.

Easily scale your Android Instrumentation Tests across Firebase Test Lab with Flank.

Nelson Osacky 218 Nov 24, 2022
A Kotlin Android library for heuristics evasion that prevents your code from being tested.

EvadeMe An Android library for heuristics evasion that prevents your code from being tested. User Instructions Add the maven repository to your projec

Chris Basinger 26 Oct 8, 2022
Simple, lightweight, modular components to help conjure your app architecture

Magic Simple, lightweight, modular components and utilities to help conjure your app architecture. Built with Kotlin coroutines to provide flexible as

TeraThought 0 Jan 9, 2022
Selenium WebDriver and Appium based Web, Mobile (Android, iOS) and Windows desktop Automation Framework with BDD & Non-BDD implementation support

Selenium WebDriver and Appium based Web, Mobile (Android, iOS) and Windows desktop Automation Framework with BDD & Non-BDD implementation support

null 10 Oct 14, 2022
A collection of tests and easy to reuse pieces of code for bdk-jvm and bdk-android

Readme This repo is a collection of tests and easy to reuse pieces of code for bdk-jvm and bdk-android. Note that they don't aim to provide a full cov

thunderbiscuit 1 Jun 28, 2022
Powerful, elegant and flexible test framework for Kotlin with additional assertions, property testing and data driven testing

Kotest is a flexible and comprehensive testing tool for Kotlin with multiplatform support. To learn more about Kotest, visit kotest.io or see our quic

Kotest 3.7k Nov 21, 2022
A tool for scan and replace file content. Instead of global search and replace, it can specify replace scope

ScanReplace.kt A tool for scan and replace file content Instead of global search and replace, it can specify replace scope Usage java -jar ScanReplace

CWKSC 4 Jan 27, 2022
Library to simplify and speed up the creation and work with adapters with payload.

Novalles Library to simplify and speed up the creation and work with adapters with payload. How to use Annotate your UI model with UIModel Annotation.

Бырна Алексей 3 Oct 11, 2022
null 862 Nov 24, 2022
Espresso - Use Espresso to write concise, beautiful, and reliable Android UI tests

Espresso Use Espresso to write concise, beautiful, and reliable Android UI tests

Android For All 1 Jan 26, 2022
TestObserver to easily test LiveData and make assertions on them.

JCenter Update LiveData Testing is currently published on JCenter - it will serve packages until February 1st, 2022. LiveData Testing packages will be

Josef Raska 394 Nov 11, 2022
An ActivityScenario extension and a Junit4 TestRule to simulate changing the font size on a device/emulator, as it would be done by going to Settings > display > Font size

FontSizeActivityScenario and FontSizeTestRule An ActivityScenario and a Junit4 TestRule to be used together with its org.junit.runners.Parameterized.

Sergio Sastre Flórez 19 Jan 6, 2022
Barista makes developing UI test faster, easier and more predictable. Built on top of Espresso

Barista makes developing UI test faster, easier and more predictable. Built on top of Espresso, it provides a simple and discoverable API, removing most of the boilerplate and verbosity of common Espresso tasks. You and your Android team will write tests with no effort.

Adevinta Spain 1.6k Nov 22, 2022
A program to calculate the distance traveled during the run the calories burned and the average speed Display data in more than one way using a graph

Running App Features: A program to calculate the distance traveled during the run the calories burned and the average speed Display data in more than

mostafa elmorshdi 1 Nov 21, 2022
A JUnit5 Platform TestEngine integrated with the official FHIR Validator to run profile and Questionnaire validation as tests.

?? FHIR Validator JUnit Engine A JUnit5 TestEngine to integrate the FHIR Validator into the JUnit5 ecosystem. Supports writing expected validation out

NAV IT 2 Feb 2, 2022
A set of TestRules and ActivityScenarios to facilitate UI Testing under given configurations: FontSizes, Locales

AndroidUiTestingUtils A set of TestRules, ActivityScenarios and utils to facilit

Sergio Sastre Flórez 111 Nov 17, 2022
Linkester is an Android library that aims to help Android developers test their deep links implementation.

Linkester Linkester is an Android library that aims to help Android developers test their deep links implementation. The idea is to have a new launche

Ahmad Melegy 80 Nov 19, 2022
Android UI Testing

User scenario testing for Android Robotium is an Android test automation framework that has full support for native and hybrid applications. Robotium

null 2.8k Nov 10, 2022