我想自动使用硒的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();
}
}
我已成功地证明By.xpath
和By.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()
作品对我好。
//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