我想使用Selenium WebDriver自动化Android网络应用程序,我运行一个简单的程序来打开谷歌页面并搜索一个术语。在找到具有名称和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();
}
}
答案 0 :(得分:1)
我设法证明By.xpath
和By.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。
注意事项:
sendKeys(...)
调用都会将文字附加到搜索查询By(...)
子句有效,但是看到代码执行并获得一些匹配的搜索结果是很好的。AndroidDriver()
实例。 答案 1 :(得分:0)
对我有用。
//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+/, '');
}