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