@@ -10,6 +10,8 @@ const { truth } = require('../assert/truth')
1010const recorder = require ( '../recorder' )
1111const Locator = require ( '../locator' )
1212const ConnectionRefused = require ( './errors/ConnectionRefused' )
13+ const { dontSeeElementError, seeElementError } = require ( './errors/ElementAssertion' )
14+ const { getElementId } = require ( '../utils' )
1315
1416const mobileRoot = '//*'
1517const webRoot = 'body'
@@ -1523,7 +1525,36 @@ class Appium extends Webdriver {
15231525 */
15241526 async dontSeeElement ( locator ) {
15251527 if ( this . isWeb ) return super . dontSeeElement ( locator )
1526- return super . dontSeeElement ( parseLocator . call ( this , locator ) )
1528+
1529+ // For mobile apps, use native display check instead of JavaScript execution
1530+ const parsedLocator = parseLocator . call ( this , locator )
1531+ const res = await this . _locate ( parsedLocator , false )
1532+
1533+ if ( ! res || res . length === 0 ) {
1534+ return truth ( `elements of ${ new Locator ( parsedLocator ) } ` , 'to be seen' ) . negate ( false )
1535+ }
1536+
1537+ // Use native isDisplayed() method without JavaScript execution for mobile
1538+ const selected = [ ]
1539+ for ( let i = 0 ; i < res . length ; i ++ ) {
1540+ try {
1541+ // Get element ID using utility function
1542+ const elementId = getElementId ( res [ i ] )
1543+
1544+ // Use the native WebDriver isDisplayed method directly
1545+ const isDisplayed = await this . browser . isElementDisplayed ( elementId )
1546+ selected . push ( isDisplayed )
1547+ } catch ( err ) {
1548+ // If native method fails, element is not displayed
1549+ selected . push ( false )
1550+ }
1551+ }
1552+
1553+ try {
1554+ return truth ( `elements of ${ new Locator ( parsedLocator ) } ` , 'to be seen' ) . negate ( selected )
1555+ } catch ( e ) {
1556+ seeElementError ( parsedLocator )
1557+ }
15271558 }
15281559
15291560 /**
@@ -1656,7 +1687,37 @@ class Appium extends Webdriver {
16561687 */
16571688 async seeElement ( locator ) {
16581689 if ( this . isWeb ) return super . seeElement ( locator )
1659- return super . seeElement ( parseLocator . call ( this , locator ) )
1690+
1691+ // For mobile apps, use native display check instead of JavaScript execution
1692+ const parsedLocator = parseLocator . call ( this , locator )
1693+ const res = await this . _locate ( parsedLocator , true )
1694+
1695+ // Check if elements exist
1696+ if ( ! res || res . length === 0 ) {
1697+ throw new AssertionFailedError ( `Element ${ new Locator ( parsedLocator ) } was not found` )
1698+ }
1699+
1700+ // Use native isDisplayed() method without JavaScript execution for mobile
1701+ const selected = [ ]
1702+ for ( let i = 0 ; i < res . length ; i ++ ) {
1703+ try {
1704+ // Get element ID using utility function
1705+ const elementId = getElementId ( res [ i ] )
1706+
1707+ // Use the native WebDriver isDisplayed method directly
1708+ const isDisplayed = await this . browser . isElementDisplayed ( elementId )
1709+ selected . push ( isDisplayed )
1710+ } catch ( err ) {
1711+ // If native method fails, element is not displayed
1712+ selected . push ( false )
1713+ }
1714+ }
1715+
1716+ try {
1717+ return truth ( `elements of ${ new Locator ( parsedLocator ) } ` , 'to be seen' ) . assert ( selected )
1718+ } catch ( e ) {
1719+ dontSeeElementError ( parsedLocator )
1720+ }
16601721 }
16611722
16621723 /**
0 commit comments