【问题标题】:Having difficulty in finding Elements using Xpath and CSS in Selenium Android Webdriver Testing在 Selenium Android Webdriver 测试中使用 Xpath 和 CSS 查找元素时遇到困难
【发布时间】:2013-03-24 17:19:09
【问题描述】:

我想使用 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();
  }

}

【问题讨论】:

    标签: android webdriver selenium-webdriver testautomationfx


    【解决方案1】:

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

    这是简化的测试页面,足以演示基础知识。将此文件复制到您的 android 设备或 AVD 的 SD 卡,例如使用以下命令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 个独立的 WebElement,它们引用了相同的底层 HTML 元素
    • 每个sendKeys(...) 调用都会将文本附加到搜索查询中
    • 从技术上讲,我们不需要提交搜索查询来演示 By(...) 子句的工作原理,但是很高兴看到代码执行并获得一些匹配的搜索结果。
    • 我注释掉了加载 Google 搜索主页的请求,但将其保留在我的回答中,这样您就可以轻松了解如何使用 Google 网站而不是静态本地 HTML 页面。
    • 我使用本地连接的 Nexus 4 手机通过 USB 运行测试,并使用本地构建的 AndroidDriver() 实例。

    【讨论】:

    • 感谢 Ripon Al Wasim 的解决方案,我正在努力解决这个问题
    【解决方案2】:

    对我有好处。

    //Author: Oleksandr Knyga
    function xPathToCss(xpath) {
        return xpath
            .replace(/\[(\d+?)\]/g, function(s,m1){ return '['+(m1-1)+']'; })
            .replace(/\/{2}/g, '')
            .replace(/\/+/g, ' > ')
            .replace(/@/g, '')
            .replace(/\[(\d+)\]/g, ':eq($1)')
            .replace(/^\s+/, '');
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2014-08-19
      相关资源
      最近更新 更多