当前位置: 首页 > 知识库问答 >
问题:

无法单击在WebView上下文中使用Appium Android驱动程序的超文本标记语言元素

裘臻
2023-03-14

我正在使用目前最新的Appium v1.3.4(版本c8c79a85fbd6870cd6fc3d66d038a115ebe22efe)测试Android混合应用程序。我还从这里下载了最新的ChromeDriver:https://groups.google.com/forum/#!主题/chromedriver用户/iBdJQHu1ipQ

被测应用程序中的登录屏幕是一个混合视图(WebView)。因此,我通过调用appiumDriver.context(“WEBVIEW_com.my.app.pkg”)切换到正确的上下文,如下所示,我还能够使用以下代码成功地找到用户名和密码字段,并使用正确的文本数据填充它们:

appiumDriver.context("WEBVIEW_com.my.app.pkg");

WebElement userNameTextField = appiumDriver.findElement(By.id("username"));
userNameTextField.click();
userNameTextField.sendKeys(new String[]{"Guest"});

WebElement passwordTextField = appiumDriver.findElement(By.id("password"));
passwordTextField.click();
passwordTextField.sendKeys(new String[]{"password"});

// The following code is not working
WebElement loginButton = appiumDriver.findElement(By.id("loginbutton"));
loginButton.click();

然而,我的问题是当我试图点击这个屏幕上的登录按钮!这就是用HTML编写按钮的方式

<div href="#" id="loginbutton" class="button">Login</div>

当我在Web环境中时,我尝试了很多方法来点击按钮,但到目前为止都是徒劳的…这是登录屏幕的HTML片段

<div id="formbody">
  <div class="line">
        <input placeholder="Username" type="text" id="username" class="styled_input" value="">
   </div>
   <div class="line">
        <input placeholder="Password" type="password" id="password" class="styled_input" value="">
   </div>
   <div class="line_button">
        <div href="#" id="loginbutton" class="button">Login</div>
   </div>
</div>

在多次尝试单击Webcontext中的div/链接后,我放弃并切换到本机上下文,并能够使用以下代码单击按钮:

appiumDriver.context("NATIVE_APP");
appiumDriver.findElementByName("Login").click();

有人能解释一下为什么我可以在WebView上下文中与用户名和密码文本字段交互,但必须切换到本机应用程序上下文才能与按钮交互?

还请注意,在WebView上下文中,我可以找到按钮。。。按id标记并调用loginButton.getText()、loginButton.isEnabled()、loginButton.isDisplayed()和getTagName()

谢啦

共有1个答案

金骞尧
2023-03-14
driver.findElement(By.xpath("//*[@id=\"formbody\"]/div[3]")).click();

应该有用。使用chrome检查设备上的元素,这将为您提供准确的xpath。
要检查元素,请在chrome中键入以下命令:chrome://inspect/#devices

 类似资料:
  • 我的应用程序中有一个webView。webView最初会打开一个我创建的HTML页面,页面上有几个按钮。这些按钮执行各种任务(我正在尝试学习如何使用webView),例如:1)显示android toast,2)显示javascript警报,3)振动手机,4)显示当前地理位置,5)在webView中打开谷歌地图。 最后一个坏了。我搜索过这个网站和其他很多网站,但没有找到一个有效的解决方案。 我相当

  • 我有一些信息要在对话框中显示。它像标题,然后在它下面的文本;标题,然后在它下面的文本。像wise一样,有4个标题和4个描述要显示。它应该是这样的 描述描述描述描述描述描述描述描述描述描述描述描述描述描述描述 描述描述描述描述描述描述描述描述描述描述描述描述描述描述描述 如您所见,有粗体文本、下划线文本、换行符等。我想将这种文本添加到警报框中,所以下面是我尝试的。 然而,这个技巧没有奏效。发生的是,

  • 我想使用flatter和dart在webview中呈现存储在手机内存中的本地HTML文件。

  • 对于上面的html内容,我如何使用Jsoup解析并获取文本 当我使用 我得到了这样的东西

  • 我是新来的。我想解析html,但问题是我们必须在中指定的URL,我将在运行时从其他页面响应此URL。有没有办法将收到的网址传递到中?我读过这样的东西: 但是我不知道如何使用它。我很想知道是否有其他方法比jsoup更好。

  • 我正在工作的工具提示和从后端我将获得数据与html标记。我需要在工具提示中显示相应的标签中的相应数据。例如,我将从后端获得Hello用户单击此处。我必须显示为你好用户在h1格式,点击这里应该是一个锚。我尝试了这两个功能,并取代其不工作。 具有以下功能: 替换: https://codesandbox.io/s/serene-fast-u8fie?file=/App.svelte