当前位置: 首页 > 知识库问答 >
问题:

在Selenium Android Webdriver测试中使用Xpath和CSS查找元素有困难

松兴邦
2023-03-14

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

}

共有2个答案

子车灿
2023-03-14

对我有好处。

//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+/, '');
}
钱承允
2023-03-14

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

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

  • 我一直在为这个selenium项目苦苦挣扎,一直在寻找与这个问题略有关联的老参考资料或帖子。我承认我不熟悉xpath和selenium,所以希望它可以像修复语法一样简单。我正在使用python 3.6。卢本图19.10上的9,如果这有什么区别的话。 我试图访问的html元素: 我尝试过的代码: 尝试不同的XPath时出现的错误消息: 我检查了火狐来尝试捕获xpath,显示为: 虽然我还不确定如何调

  • 问题内容: 在我的网页中,有一个名为的。 我如何找到它? 问题答案: 此选择器应该可以工作,但是如果您用合适的标记替换它,效率会更高: 或者,由于我们知道所搜索的元素是: 但是,因为这也可以匹配诸如或的情况,所以注释中提供的@Tomalak版本 更好 : 如果您真的想确定它可以正确匹配,则还可以使用normalize-space函数清除类名周围的杂散空格字符(如@Terry所述): 请注意,在所有

  • 非常感谢您的帮助。 我想知道firebug复制xpath是否总是适用于webdriver。 我有一个带有列表的页面,我可以获得完整的xpath来查找前两个元素,但无法对3、4执行相同的操作。 对于第三个,它不起作用: 错误: org.openqa.selenium.NoSuchElementException:无法定位元素:{"method":"xpath","selector":"/html/b

  • 我正在编写一个可重用的代码来寻找自动化测试的元素。在上面的代码中,可以通过两种方式找到元素,我可以根据或通过文本查找它;但是我在硒中找不到任何东西,我可以用我想要的方式找到元素。 我正在使用“find_element”来查找元素,但是没有任何东西可以传递或作为论据。 我尝试了-或 无论如何,我可以在webview上找到使用Selenium驱动程序和一些文本作为其论据的元素吗??

  • 问题内容: 我有3个div。 像这样: 他们将充满文字。我不确定多少。问题是,所有高度都必须相等。 我如何使用jQuery(或CSS)查找DIV最高的并将其他两个设置为相同的高度,从而创建3个相等高度的DIV。 这可能吗? 问题答案: 您不能轻松地通过高度选择或在CSS中进行比较,但是jQuery和一些迭代应该可以轻松解决此问题。我们将遍历每个元素并跟踪最高的元素,然后再次遍历并将每个元素的高度设