wait.until(ExpectedConditions.visibilityOfElementLocated is not working,it is not waiting until the condition is met

WebDriverWait wait = new WebDriverWait(driver, 90);
wait.until(ExpectedConditions.visibilityOfElementLocated(MobileBy.AccessibilityId(“Text field”)));
MobileElement mobNumberField =driver.findElementByAccessibilityId(“Text field”);
mobNumberField.sendKeys(“someTExt”);

@Aleksei Can you please help me here?

You are with iOS or Android?

I am using iOS.
There 3 fields on different screens.
mobile field -id (“Text Field”)
sms Code field -id(“Text Field”)
network Code -id (“Text Field”)
For first field it is working but for other it is giving No such element exception,but when I am using thread.sleep it is working fine.But I will have to use only explicit wait.
and my code is like below:
public void onBoarding() throws InterruptedException{
WebDriverWait wait = new WebDriverWait(driver, 50);
wait.until(ExpectedConditions.visibilityOfElementLocated(MobileBy.AccessibilityId(“Text field”)));
MobileElement mobNumberField =driver.findElementByAccessibilityId(“Text field”);
mobNumberField.sendKeys(“XXXXXX”);
wait.until(ExpectedConditions.visibilityOfElementLocatedMobileBy.AccessibilityId(“Text field”)));
//Thread.sleep(3000);
MobileElement smsField=driver.findElemenMobileBy.AccessibilityId(“Text field”)));
smsField.sendKeys(“XXXX”);
wait.until(ExpectedConditions.visibilityOfElementLocated(MobileBy.AccessibilityId(“Text field”)));
driver.findElementByAccessibilityId(“Text field”).sendKeys(“a”);

not sure but in your case i will wrote something like:

protected List<MobileElement> waitElementLoaded(By mobileBy, int sec) {
        List<MobileElement> elements;
        long startTime = System.currentTimeMillis();
        do {
            elements = driver.findElements(mobileBy);
            if (elements.size() > 0)
                break;
        } while (System.currentTimeMillis() < startTime + sec * 1000);
        return elements;
    }