有寻找在硒的Android webdriver的测试使用XPath和CSS元素困难(Having d

2019-08-19 05:17发布

我想自动使用硒的webdriver的Android网络应用程序,我已经运行一个简单的程序打开谷歌页面和搜索的术语。 虽然发现的名称和ID的元素它完美地运行。 但是,当试图找到与XPath和CSS中元素似乎很难。 有谁知道如何使用XPath和CSS路径中硒的Android的webdriver? 下面是我使用的代码示例:

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();
  }

}

Answer 1:

我已成功地证明By.xpathBy.cssSelector能找到的元素,然后可以在我们的代码中使用与网页互动。 一对夫妇的实际原因我创建了一个影子,简化测试页,然后提交查询,以获得来自谷歌的搜索引擎的搜索结果。

下面是简单的测试页,足以证明的基本知识。 将此文件复制到你的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个独立WebElements其是指相同的底层HTML元素
  • 每个sendKeys(...)调用追加文本搜索查询
  • 从技术上讲,我们并不需要提交的搜索查询,以证明By(...)子句的工作,但它是很好看的代码执行,并得到一些匹配的搜索结果。
  • 我注释掉加载谷歌搜索主页上的要求,但它留在我的答案,所以你可以很容易地看到如何使用的,而不是静态的HTML页,在谷歌网站。
  • 我跑测试与本地连接的Nexus 4手机,通过USB,以及所使用的的当地建造实例AndroidDriver()


Answer 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+/, '');
}


文章来源: Having difficulty in finding Elements using Xpath and CSS in Selenium Android Webdriver Testing