Skip to content

Commit

Permalink
fix tests and use better selectors (#362)
Browse files Browse the repository at this point in the history
  • Loading branch information
ndmanvar authored Dec 15, 2023
1 parent 5f148c9 commit fdf6ed1
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ def test_captureexception_react_native_android(android_react_native_emu_driver):

try:
# click into list app screen
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.Button[1]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'LIST APP').click()

# trigger exception
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup[5]/android.widget.TextView')
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="Capture Exception"]')
btn.click()

except Exception as err:
sentry_sdk.capture_exception(err)
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ def test_capturemessage_react_native_android(android_react_native_emu_driver):

try:
# click into list app screen
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.Button[1]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'LIST APP').click()

# trigger message
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup[3]/android.widget.TextView')
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="Capture Message"]')
btn.click()

except Exception as err:
sentry_sdk.capture_exception(err)
sentry_sdk.capture_exception(err)
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,27 @@
def test_checkout_react_native_android(android_react_native_emu_driver):

try:
add_to_cart_btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup/android.view.ViewGroup/android.widget.TextView')
add_to_cart_btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '(//android.widget.TextView[@text="Add to Cart"])[1]')
add_to_cart_btn.click()
add_to_cart_btn.click()
add_to_cart_btn.click()

# 'view cart' button
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.Button[2]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'CART').click()

# checkout button
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.Button[2]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'CHECKOUT').click()

# Appium on android can't find the 'place your order' button
# unless we scroll down to it
bottom_of_screen_element = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[3]/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup[8]/android.widget.EditText')
top_of_screen_element = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[3]/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.widget.TextView')
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '(//android.widget.EditText)[1]')

top_of_screen_element = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '(//android.widget.EditText)[1]')
bottom_of_screen_element = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '(//android.widget.EditText)[7]')
android_react_native_emu_driver.scroll(bottom_of_screen_element, top_of_screen_element)

# Place order button
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[3]/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup[7]/android.view.ViewGroup[2]/android.view.ViewGroup/android.view.ViewGroup/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="Place your order"]').click()

except Exception as err:
sentry_sdk.capture_exception(err)
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@ def test_homescreen_react_native_android(android_react_native_emu_driver, random

try:
# click into list app screen
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.Button[1]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'LIST APP').click()

# Handled Exceptions - This clicks the Handled Exception' button in the app
# This error type does not increment the Crash Count for the release,
# This error type does not increment the Crash Count for the release,
# but the UI in Release dashboard separates from Handled vs Handled, so good to capture some of these, for having a more diverse data set.
# 40% of the time this will error.
if random.randint(1,10) < 3:
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup[5]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="Capture Exception"]').click()

# Unhandled Exception - This clicks the 'Uncaught Thrown Error' button in the app
# This error type increments the Crashes count for the release
# 40% of the time this will error.
if random.randint(1,10) < 3:
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup[7]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="Uncaught Thrown Error"]').click()


# TODO - select by something other than a xpath. This may require a <TextView> in react-native instead of a <Text>
Expand All @@ -32,4 +32,4 @@ def test_homescreen_react_native_android(android_react_native_emu_driver, random
sentry_sdk.capture_exception(err)



Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ def test_nativecrash_react_native_android(android_react_native_emu_driver):

try:
# click into list app screen
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.Button[1]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'LIST APP').click()

# trigger crash
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup[11]/android.widget.TextView')
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="Native Crash"]')
btn.click()
# launch app again or the error does not get sent to Sentry
android_react_native_emu_driver.launch_app()

except Exception as err:
sentry_sdk.capture_exception(err)
sentry_sdk.capture_exception(err)
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ def test_uncaughtthrownerror_react_native_android(android_react_native_emu_drive

try:
# click into list app screen
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.Button[1]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'LIST APP').click()

# trigger error
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup[7]/android.widget.TextView')
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="Uncaught Thrown Error"]')
btn.click()
# launch app again or the error does not get sent to Sentry
android_react_native_emu_driver.launch_app()

except Exception as err:
sentry_sdk.capture_exception(err)
sentry_sdk.capture_exception(err)
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ def test_unhandledpromiserejection_react_native_android(android_react_native_emu

try:
# click into list app screen
android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.widget.Button[1]/android.widget.TextView').click()
android_react_native_emu_driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'LIST APP').click()

# trigger error
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[2]/android.view.ViewGroup[9]/android.widget.TextView')
btn = android_react_native_emu_driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="Unhandled Promise Rejection"]')
btn.click()

except Exception as err:
sentry_sdk.capture_exception(err)
sentry_sdk.capture_exception(err)

0 comments on commit fdf6ed1

Please sign in to comment.