Selenium 如何使用XPath获取属性值

Selenium 如何使用XPath获取属性值,selenium,xpath,selenium-webdriver,Selenium,Xpath,Selenium Webdriver,我一直在使用SeleniumWebDriver进行测试,我一直在寻找XPath代码来获取HTML元素的属性值,作为回归测试的一部分。但是我找不到一个好的答案 以下是我的示例html元素: <div class="firstdiv" alt="testdiv"></div> 现在,我正在寻找一个XPath代码来获取“alt”属性的值。假设我不知道“alt”属性的值是多少。您可以使用getAttribute()方法 driver.findElement(By.xpath("

我一直在使用SeleniumWebDriver进行测试,我一直在寻找XPath代码来获取HTML元素的属性值,作为回归测试的一部分。但是我找不到一个好的答案

以下是我的示例html元素:

<div class="firstdiv" alt="testdiv"></div>

现在,我正在寻找一个XPath代码来获取“alt”属性的值。假设我不知道“alt”属性的值是多少。

您可以使用
getAttribute()
方法

driver.findElement(By.xpath("//div[@class='firstdiv']")).getAttribute("alt");
使用C#、.Net 4.5和Selenium 2.45

使用findElements将firstdiv元素捕获到集合中

var firstDivCollection = driver.findElements(By.XPath("//div[@class='firstdiv']"));
然后迭代集合

        foreach (var div in firstDivCollection) {
            div.GetAttribute("alt");
        }

只需使用
executeScript
并在浏览器中执行XPath或
querySelector/getAttribute
。其他的解决方案是错误的,因为如果您有多个元素,那么为Selenium中的每个元素调用
getAttribute
将花费很长时间

  var hrefsPromise = driver.executeScript(`
        var elements = document.querySelectorAll('div.firstdiv');
        elements = Array.prototype.slice.call(elements);
        return elements.map(function (element) {
              return element.getAttribute('alt');
        });
  `);

Selenium Xpath只能返回元素。 您应该传递执行XPath并将字符串返回给selenium的javascript函数


我不知道他们为什么这样做。Xpath应该支持返回字符串。

使用Selenium将无法做到这一点。Selenium希望XPath查询返回物理DOM元素。为什么
getAttribute('alt')
不起作用?@Arran因为当您运行远程Selenium(如Browserstack)时,它需要很长时间:每个
getAttribute
都是
+=2*延迟
。同意@polkovnikov.ph,在运行远程Selenium时,您应该尽一切努力使测试不那么健谈,但在这种情况下,只有两个调用,一个是获取元素,另一个是从元素中获取属性。@Arran通过一个调用查看我的解决方案。@polkovinkov.ph,当然,如果您喜欢这样做,太好了!:)谢谢Richard的快速回复。。。然而,我的情况是,我有一个应用程序,其中用户将只向我提供xpath,并基于它,系统将进行测试…但我想除了执行两个调用之外,没有其他方法了…首先获取元素,然后获取属性
  var hrefsPromise = driver.executeScript(`
        var elements = document.querySelectorAll('div.firstdiv');
        elements = Array.prototype.slice.call(elements);
        return elements.map(function (element) {
              return element.getAttribute('alt');
        });
  `);