Source code
Revision control
Copy as Markdown
Other Tools
#!/bin/bash
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
ACTIVITY="org.mozilla.fenix.HomeActivity"
TOOLBAR_BOUNDS_ID="toolbar"
TABS_TRAY_BUTTON_BOUNDS_ID="counter_box"
XML_FILE=$TESTING_DIR/window_dump.xml
XMLSTARLET_CMD=${XMLSTARLET:-xmlstarlet}
TEST_TIME=$1
if [[ $BROWSER_BINARY == *"chrome"* ]]; then
  ACTIVITY="com.google.android.apps.chrome.Main"
  TOOLBAR_BOUNDS_ID="search_box_text"
  TABS_TRAY_BUTTON_BOUNDS_ID="tab_switcher_button"
fi
TAP_X=0
TAP_Y=0
calculate_tap_coords() {
    x1=$(($(echo "$1" | awk -F'[][]' '{print $2}' | awk -F',' '{print $1}')))
    x2=$(($(echo "$1" | awk -F'[][]' '{print $4}' | awk -F',' '{print $1}')))
    sum_x=$(($x1+$x2))
    y1=$(($(echo "$1" | awk -F'[][]' '{print $2}' | awk -F',' '{print $2}')))
    y2=$(($(echo "$1" | awk -F'[][]' '{print $4}' | awk -F',' '{print $2}')))
    sum_y=$(($y1+$y2))
    TAP_X=$(($sum_x/2))
    TAP_Y=$(($sum_y/2))
}
tap_at_coords(){
    adb shell input tap $TAP_X $TAP_Y
}
adb shell pm clear $BROWSER_BINARY
adb shell am start -n "$BROWSER_BINARY/$ACTIVITY"
sleep 4
if [[ $BROWSER_BINARY == *"chrome"* ]]; then
    # navigate away from the first run prompt
    adb shell uiautomator dump
    adb pull /sdcard/window_dump.xml $XML_FILE
    sleep 1
    DISMISS_BOUNDS=$($XMLSTARLET_CMD sel -t -v 'string(//node[@resource-id = "'$BROWSER_BINARY':id/signin_fre_dismiss_button"]/@bounds)' "$XML_FILE")
    sleep 1
    calculate_tap_coords $DISMISS_BOUNDS
    tap_at_coords
    sleep 2
    # navigate away from privacy notice
    adb shell uiautomator dump
    adb pull /sdcard/window_dump.xml $XML_FILE
    sleep 1
    DISMISS_BOUNDS=$($XMLSTARLET_CMD sel -t -v 'string(//node[@resource-id = "'$BROWSER_BINARY':id/ack_button"]/@bounds)' "$XML_FILE")
    sleep 1
    calculate_tap_coords $DISMISS_BOUNDS
    tap_at_coords
    sleep 1
fi
adb shell uiautomator dump
adb pull /sdcard/window_dump.xml $XML_FILE
sleep 1
# calculate toolbar coordinates
TOOLBAR_BOUNDS=$($XMLSTARLET_CMD sel -t -v '//node[@resource-id = "'$BROWSER_BINARY':id/'$TOOLBAR_BOUNDS_ID'"]/@bounds' $XML_FILE)
sleep 1
calculate_tap_coords $TOOLBAR_BOUNDS
TOOLBAR_X_COORDINATE=$TAP_X
TOOLBAR_Y_COORDINATE=$TAP_Y
# calculate tabs tray coordinates
TABS_TRAY_BUTTON_BOUNDS=$($XMLSTARLET_CMD sel -t -v '//node[@resource-id = "'$BROWSER_BINARY':id/'$TABS_TRAY_BUTTON_BOUNDS_ID'"]/@bounds' $XML_FILE)
sleep 1
calculate_tap_coords $TABS_TRAY_BUTTON_BOUNDS
TABS_TRAY_BUTTON_X_COORDINATE=$TAP_X
TABS_TRAY_BUTTON_Y_COORDINATE=$TAP_Y
adb shell input tap $TABS_TRAY_BUTTON_X_COORDINATE $TABS_TRAY_BUTTON_Y_COORDINATE
sleep 2
adb shell uiautomator dump
adb pull /sdcard/window_dump.xml $XML_FILE
# calculate new tab button coordinates
if [[ $BROWSER_BINARY == *"chrome"* ]]; then
    ADD_TAB_BUTTON_BOUNDS=$($XMLSTARLET_CMD sel -t -v '//node[@resource-id="new_tab_view_button"]/@bounds' $XML_FILE)
else
    ADD_TAB_BUTTON_BOUNDS=$($XMLSTARLET_CMD sel -t -v '//node[@content-desc="Add tab"]/@bounds' $XML_FILE)
fi
sleep 1
calculate_tap_coords $ADD_TAB_BUTTON_BOUNDS
ADD_TAB_BUTTON_X_COORDINATE=$TAP_X
ADD_TAB_BUTTON_Y_COORDINATE=$TAP_Y
rm $XML_FILE
# go back to main page to start testing
adb shell input keyevent KEYCODE_BACK
sleep 1
function tapToFocusToolbar() {
    adb shell input tap $TOOLBAR_X_COORDINATE $TOOLBAR_Y_COORDINATE
    sleep 2
}
function inputTextToToolbar() {
    adb shell input text $1
    sleep 2
}
function tapEnterAndWait5s() {
    adb shell input keyevent 66
    sleep 5
}
function tapEnterAndWait10s() {
    adb shell input keyevent 66
    sleep 10
}
function performScrollDown() {
    adb shell input swipe 500 500 500 300
    adb shell input swipe 500 500 500 300
    adb shell input swipe 500 500 500 300
    sleep 2
}
function performScrollUp() {
    adb shell input swipe 500 300 500 500
    adb shell input swipe 500 300 500 500
    adb shell input swipe 500 300 500 500
    sleep 2
}
function tapToOpenTabsTray() {
    adb shell input tap $TABS_TRAY_BUTTON_X_COORDINATE $TABS_TRAY_BUTTON_Y_COORDINATE
    sleep 2
}
function tapToAddTab() {
    adb shell input tap $ADD_TAB_BUTTON_X_COORDINATE $ADD_TAB_BUTTON_Y_COORDINATE
    sleep 3
}
function addTab() {
    tapToOpenTabsTray
    tapToAddTab
}
function surfingSingleSite() {
    tapToFocusToolbar
    inputTextToToolbar $1
    tapEnterAndWait10s
    performScrollDown
    performScrollUp
}
function appToBackground() {
    adb shell input keyevent KEYCODE_HOME
    sleep 2
}
surfingSingleSite $URL_MOZILLA
if [ "$RUN_BACKGROUND" = True ]; then
    appToBackground
fi
# at this point our system is ready, the buttons' coordinates are generated
# test starts after this line
touch $TESTING_DIR/test_start.signal
sleep $(($TEST_TIME+10)) # wait 10 mins in the background
touch $TESTING_DIR/test_end.signal
adb shell am force-stop $BROWSER_BINARY