android - 在 Selenium Android Webdriver 测试中难以使用 Xpath 和 CSS 查找元素

标签 android webdriver selenium-webdriver testautomationfx

我想使用 Selenium WebDriver 自动化 android web 应用程序,我运行了一个简单的程序来打开 google 页面并搜索一个词。在找到具有名称和 ID 的元素时,它运行完美。但是在尝试使用 Xpath 和 Css 查找元素时似乎很困难。有人知道如何在 selenium android webdriver 中使用 xpath 和 css 路径吗?这是我使用的示例代码:

public class TestDriver extends TestCase 
{

    public static void testGoogle() throws Exception 
    {
    AndroidDriver driver = new AndroidDriver();


    driver.get("http://google.com");
    WebElement element = driver.findElement(By.name("q"));
       //WebElement element = driver.findElement(By.xpath("//*[@id='gbqfq']"));
       //WebElement element = driver.findElement(By.cssSelector("#gbqfq"));
    element.sendKeys("android driver");
    element.submit();
    System.out.println("Page title is: " + driver.getTitle());
    //driver.quit();
  }

}

最佳答案

我已经设法证明 By.xpathBy.cssSelector 能够找到可以在我们的代码中使用的元素来与网页交互。出于几个实际原因,我创建了一个影子、简化的测试页面,然后提交查询以从 Google 的搜索引擎获取搜索结果。

这是简化的测试页面,足以演示基础知识。将此文件复制到您的 android 设备或 AVD 的 sdcard,例如使用以下命令 adb push form.html/sdcard/form.html

<html>
<head>
  <title>WebDriver form test page</title>
</head>
<body>
<form name="testform" action="http://www.google.co.uk/search" method="get">
  <input id="gbqfq" class="gbqfif" type="text" value="" autocomplete="off" name="q">
  <input type="submit" value="search Google">
</form>
</body>
</html>

这是您问题中代码的修改版本:

@Test
public void testByClauses() throws Exception {
     AndroidDriver driver = new AndroidDriver();
     // driver.get("http://www.google.co.uk/");
     driver.get("file:///sdcard/form.html");
     System.out.println(driver.getPageSource());

     WebElement nameElement = driver.findElement(By.name("q"));
     WebElement xpathElement = driver.findElement(By.xpath("//*[@id='gbqfq']"));
     WebElement cssElement = driver.findElement(By.cssSelector("#gbqfq"));

     nameElement.sendKeys("android ");
     xpathElement.sendKeys("driver ");
     cssElement.sendKeys("webdriver");
     nameElement.submit();
     System.out.println("Page title is: " + driver.getTitle());
     driver.quit();
}

我碰巧使用 JUnit 4 作为测试运行程序(因此使用 @Test 注释),但是这段代码也应该在 JUnit 3 中工作。

注意事项:

  • 我特意使用了 3 个独立的 WebElements,它们引用相同的底层 HTML 元素
  • 每个 sendKeys(...) 调用都会将文本附加到搜索查询中
  • 从技术上讲,我们不需要提交搜索查询来演示 By(...) 子句的工作,但是很高兴看到代码执行并获得一些匹配的搜索结果。<
  • 我注释掉了加载 Google 搜索主页的请求,但将其保留在我的回答中,以便您可以轻松了解如何使用 Google 站点而不是静态本地 HTML 页面。
  • 我使用本地连接的 Nexus 4 手机通过 USB 运行了测试,并使用了本地构建的 AndroidDriver() 实例。

关于android - 在 Selenium Android Webdriver 测试中难以使用 Xpath 和 CSS 查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15780616/

相关文章:

android - 允许 Android 用户访问我的数据库是一个好习惯吗?

Python Selenium 打印出文本字段的值显示为空。该值未打印

java - 如果类中存在禁用测试,则不会调用 TestNg @afterclass

java - Selenium:选择间接兄弟元素

android - 在我的案例中如何在可扩展 ListView 中获取 View 不显示它显示空白的可扩展列表

android - 在 Mac 上编译 x264 : "No working C compiler found" and "arm-linux-androideabi-gcc: command not found"

android - 为 Google Cast 注册应用程序

javascript - Webdriver.io - 很可能无法加载规范文件,因为它们依赖于 `browser` 对象

selenium - 使用Robot框架的未处理错误 “Cannot find context with specified id”

python - 单击不可见的元素(有 slider 的地方)