'Element was null when I user page object pattern

I'm new to mobile automation, and I'm facing a problem with page object pattern. When I try to find element with FindElementById everything works, here is my class with pop:

public class SamplePage
    {
        private AndroidDriver<AndroidElement> _driver;

        [FindsByAndroidUIAutomator(ID = "com.miui.calculator:id/btn_1_s")]
        private readonly AndroidElement _buttonOne;

        [FindsByAndroidUIAutomator(ID = "android:id/button1")]
        private readonly AndroidElement _confirmButton;

        public SamplePage(AndroidDriver<AndroidElement> driver)
        {
            _driver = driver;
            PageFactory.InitElements(_driver, this);
        }

        public void ClickOnConfirmButton()
        {
            //AndroidElement _confirmButton = _driver.FindElementById("android:id/button1");
            _confirmButton.Click();
        }

        public void ClickOnButtonOne()
        {
            //AndroidElement _buttonOne = _driver.FindElementById("com.miui.calculator:id/btn_1_s");
            _buttonOne.Click();
           
        }

    }

And here is main class

using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Enums;
using OpenQA.Selenium.Appium.Android;
using OpenQA.Selenium.Remote;
using System;
using AppiumDotNetSamples.Helper;

namespace AppiumDotNetSamples
{
    [TestFixture()]
    public class AndroidBasicInteractionsTest
    {
        private AndroidDriver<AndroidElement> driver;
        private SamplePage _samplePage;

        [SetUp()]
        public void BeforeAll()
        {
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.SetCapability(MobileCapabilityType.PlatformName, "Android");
            capabilities.SetCapability(MobileCapabilityType.PlatformVersion, "7.1.2");
            capabilities.SetCapability(MobileCapabilityType.AutomationName, "UIAutomator2");
            capabilities.SetCapability(MobileCapabilityType.DeviceName, "3e52f2ee7d34");
            capabilities.SetCapability("appPackage", "com.miui.calculator");
            capabilities.SetCapability("appActivity", "com.miui.calculator.cal.CalculatorActivity");
           
            driver = new AndroidDriver<AndroidElement>(new Uri("http://localhost:4723/wd/hub"), capabilities, TimeSpan.FromSeconds(180));
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);

            _samplePage = new SamplePage(driver);
        }

        [Test()]
        public void Click()
        {
            _samplePage.ClickOnConfirmButton();
            _samplePage.ClickOnButtonOne();
        }

        [TearDown()]
        public void AfterAll()
        {
            driver.Quit();
        }
        
    }
}

What am I doing wrong? I test on on Xiaomi Calculator app, but earlier I got the same issues on any other app like Google Calculator.



Solution 1:[1]

The ClickConfirmButton method is not returning the driver and hence it is null.

You may want to try something similar this and see if it is working

      public AboutPage goToAboutPage()
        {
            about.Click();
            return new AboutPage(driver);
        }       

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 john