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