c# - 当我使用页面对象模式时元素为空

标签 c# testing appium appium-android

我是移动自动化的新手,我面临着页面对象模式的问题。当我尝试使用 FindElementById 查找元素时,一切正常,这是我的 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();
           
        }

    }

这是主类

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();
        }
        
    }
}

我做错了什么?我在小米计算器应用上进行了测试,但早些时候我在谷歌计算器等任何其他应用上遇到了同样的问题。

最佳答案

ClickConfirmButton 方法未返回驱动程序,因此它为 null。

你可能想尝试类似的东西,看看它是否有效

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

关于c# - 当我使用页面对象模式时元素为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59006429/

相关文章:

c# - 将对象存储在数组中然后访问它们

c# - 如何从 VB.Net 调用 C# 事件

android - 在 Appium 中,通过不是 View id 字段的唯一 id 查找 Android View

c# - 混合构造函数集字段和字段初始化器

c# - 拖放动态创建的快捷方式

perl - 如何使用 Test::WWW::Mechanize::PSGI 测试 Dancer 应用程序?

json - postman 测试 - 只断言设置键 :value pairs in an object, 没有意外返回

grails - 在 Grails 中用于测试的不同 resources.xml?

java - 如何通过java使用appium和selenium处理webview

java - appium TouchAction press 和 moveTo 滚动方法在 Android 8.1 上不起作用