在 appium 测试中选择带有 id 的 web 元素开始使用 AndroidDriver

Selecting web element with id in appium test started using AndroidDriver

我是 Appium 的新手,刚开始进行整体测试。我使用 Android 驱动程序来测试 android 中的应用程序。

我可以处理应用程序中的所有点击和输入。但是使用OAuth服务登录应用程序时出现问题

我使用以下驱动程序客户端。 appium dotnet driver

登录服务在单独的 chrome 浏览器中打开。我必须在网页内的输入元素中键入文本。

我使用以下代码。在调试页面资源中只有 chrome 浏览器的 android 元素,没有网络内容。

var appiumDriver = new AndroidDriver<AndroidElement>(driverUri, appiumOptions);

[Test()]
[Order(1)]
public async Task TestLogin()
{
    try
    {
        appiumDriver.FindElementByAccessibilityId("Login").Click();
        await Task.Delay(3000);
        var source = appiumDriver.PageSource;
        var element = appiumDriver.FindElementById("login-email");
    }
    catch (NoSuchElementException ex)
    {
    }
}

谁能建议如何处理这个问题?这也必须在 iOS 中完成,我想两者都可以以相同的方式处理。提前致谢。

问题不是更改为在网页中搜索的网络上下文。测试流程必须是

  1. 执行从应用打开网页的操作。 (在我的例子中点击登录按钮)
  2. 等到网页出现。 (这很重要,因为 Web 上下文只有在网页出现后才可用)为此,我使用 FindElementByClassName 作为唯一控件,该控件在网页中可见,但在上一个 App 页面上不可见。肯定有更好的方法。
  3. 获取可用上下文并切换到 Web 上下文。
  4. 我使用 FindByCssSelector 查找具有 id 的元素。

更改为 Web 上下文

public static void ChangeToWebContext()
{
    if (driver.Context != "NATIVE_APP")
        return;

    var elements = driver.FindElementByClassName("android.widget.EditText");

    var availableContext = driver.Contexts;
    if (availableContext.Count >= 2)
    {
        driver.Context = availableContext[1];
        return;
    }
}

乌斯盖:

this.ChangeToWebContext();
driver.FindElementByCssSelector("#login-password");