定位器不起作用,除了 WebView 中 Appium for Android 上的 id

Posted

技术标签:

【中文标题】定位器不起作用,除了 WebView 中 Appium for Android 上的 id【英文标题】:Locator is not working except id on the Appium for Android in WebView 【发布时间】:2021-08-06 21:55:48 【问题描述】:

尝试做在 WebView 中编码的 android 应用程序的测试。我有一个应用程序正在尝试自动化测试用例。

我有一个登录屏幕,其中包含有 ID 定位器的电子邮件和密码。这很好,我能够找到元素。使用 ionic 制作的 IT 混合应用程序。登录按钮没有 id 定位器。

到目前为止,我已经尝试过这个东西。

MobileWebBrowserFactory factory;
AndroidDriver<WebElement> appiumdriver;
WebElement LoginElement = appiumdriver.findElement(By.id("username"));
LoginElement.click();
LoginElement.sendKeys("Test");

WebElement PasswordElement = appiumdriver.findElement(By.id("password"));
PasswordElement.click();
PasswordElement.sendKeys("Test");
// Hide Keyboard
appiumdriver.hideKeyboard();
Thread.sleep(2000);

            WebElement LoginButton = appiumdriver
                    .findElementByName("end");

它给了我一个例外,即始终不允许定位器查找名称。我同时使用了 Android 和 appium 驱动程序。

任何人都可以为此向我推荐好的图书馆吗?提前感谢您的帮助。

谢谢

【问题讨论】:

登录按钮有类名吗? 不,它没有。它确实有 id 你是说登录按钮有id?但你的问题陈述说 - 登录按钮没有 id 定位器。 对不起,我的错,它没有 id 但它有一个名字。 【参考方案1】:

我很长时间没有使用 Appium,所以也许我错了,但我记得,Appium 仅支持通过 idxpath 定位元素。 所以,不要尝试findElementByName,而是尝试findElementByXpath。 定位器应该相应地改变,所以它会像

WebElement LoginButton = appiumdriver.findElementByXpath("//*[@name='end']");

【讨论】:

我试过它对我不起作用。我尝试了 Androiddriver 和 Appium 驱动程序。【参考方案2】:

我对代码做了一些修改。

将 Appium 服务器从 1.10 更改为 1.20.2。 使用的 Android 驱动程序实例。

另外,将 Xpath 用于非离子框架。

它为我解决了这个问题,我可以使用它找到元素。

        WebElement UsernameElement = appiumdriver.findElementByXPath("//*[@id=\"username\"]/input");
        Thread.sleep(1000);
        UsernameElement.click();
        Thread.sleep(1000);
        UsernameElement.sendKeys("mobile3@20212.com");

也许旧 Appium 无法识别该元素。

【讨论】:

所以,最后你使用的是findElementByXPath,而不是我建议的findElementByName...至于升级 Appium 服务器,我认为这不是问题。 findElementByXPath 和 findElementByName 这是我尝试过的,但没有成功。当我重新安装只能工作的 Appium 时。我降级 appium 只是为了检查,它再次停止工作。所以它的 appium 驱动程序就是问题所在。 啊,好的。有趣的。谢谢!

以上是关于定位器不起作用,除了 WebView 中 Appium for Android 上的 id的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio:地理定位不起作用。无法在 Webview 中获取地理位置

CoordinatorLayout 中 AppBarLayout 下面的 WebView 不起作用

navigator.permissions.query 在 android/ios webview 中不起作用

WebView.loadData 在 Android 9.0 (API-29) 上不起作用

无法在 android webview 上执行操作

使用 Intent 从 WebView 拨打电话不起作用