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



我是Appium和整个测试的新手。我使用Android驱动程序在Android中测试了一个应用程序。

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

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

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

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

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中完成,我想两者都可以用相同的方式处理。。提前谢谢。

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

  1. 执行操作以从应用程序打开网页。(在我的情况下,单击登录按钮(
  2. 等待网页出现。(这一点很重要,因为web上下文只有在网页出现后才可用(为此,我使用了FindElementByClassName作为唯一控件,该控件在网页中可见,但在以前的应用程序页面上不可见。肯定有更好的方法
  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;
}
}

Usgae:

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

最新更新