Ruby Selenium Webdriver:查找元素后获取属性

Ruby Selenium Webdriver:查找元素后获取属性,ruby,selenium-webdriver,Ruby,Selenium Webdriver,我对自动化还是比较陌生,所以这听起来像是个愚蠢的问题。 在发布一个问题之前,我用谷歌搜索了一下,结果发现:) 不管怎么说,问题出在这里 我正在安卓设备上自动化测试 测试之一是验证项目是否已标记为“收藏夹” 页面的代码段为: <li class = "resultItem isFavorite" data-index="2"> <div class="name" data-cis="4ced6feb-3b5c-415a-ae1c-0b8bca8e3c85" onclick="re

我对自动化还是比较陌生,所以这听起来像是个愚蠢的问题。 在发布一个问题之前,我用谷歌搜索了一下,结果发现:)

不管怎么说,问题出在这里

我正在安卓设备上自动化测试 测试之一是验证项目是否已标记为“收藏夹” 页面的代码段为:

<li class = "resultItem isFavorite" data-index="2">
<div class="name" data-cis="4ced6feb-3b5c-415a-ae1c-0b8bca8e3c85" onclick="return true">f,f</div>
</li>
  • f、 f
  • 我可以用
    el=@driver.find_元素(:xpath,“/*[class='name'和text()='f,f'])在列表中找到元素
    。我希望el.class能告诉我resultItem是我最喜欢的。 相反,我得到的是:Selenium:WebDriver::Element

    如果项目未标记为收藏夹,则不会在字段中添加isFavorite标志。 我希望使用isFavorite来验证项目是否标记为favorite,但我似乎无法将其放入变量中

    任何帮助都将不胜感激

    谢谢


    杰夫

    您在这里真正想要的是以下内容:

    # Note: Possibly incorrect Ruby code here. 
    # Written from memory.
    el = @driver.find_element(:xpath, "/your/xpath/here")
    # Could also your el["class"]
    element_class_attribute = el.attribute("class")
    

    通常,使用大多数属性名,如
    src
    (如
    el.src
    )会导致运行时错误。然而,在Ruby中,
    class
    有一个特殊的含义,每个对象都有一个
    class
    属性,这就是Ruby类。

    我可以通过另一种方式解决这个问题:

    element = @driver.find_elements(:class, "isFavorite")
    element.each do |t|
       if t.text() == 'f,f' then
           result = "pass"
       end
    end
    
    我有一种感觉,这可能真的很慢,如果有一个很长的列表…但至少它是有效的:)

    谢谢


    杰夫

    我在这里读两个问题。首先,简短、简单的一个

    Q:现在我已经找到了
    el
    ,如何访问它的class HTML属性?

    答:使用
    el.attribute('class')
    ,或其缩写
    el['class']
    。看

    现在是长的

    Q:如何测试由
    el
    表示的项目是否标记为收藏夹?

    A:见下文

    为了给出更好的答案,我需要更多关于我们正在测试的页面组成的信息。我做了一些基本假设:

    • 该页面有一个或多个
      li
      元素,这些元素具有class
      'resultItem'
      ,其中一些元素还具有class
      'isFavorite'
    • 每个
      li
      元素都有一个或多个子元素,其中一个子元素保证是类为
      'name'
      div
    • 只有一个子
      div
      将具有文本
      'f,f'
    概括地说,我们有两种方法来实现这一点

  • 我们可以找到相关的
    div
    ,然后验证它的父
    li
    具有类
    “isFavorite”
  • 我们可以找到类为“isFavorite”的所有
    li
    元素,然后验证其中一个是否包含相关的
    div
  • 这里有很多事情我们需要注意

    对于Selenium,XPath选择器擅长通过文本查找,但是。CSS选择器擅长按类查找,但是。这两种方法都不适合查找我们要查找的
    div

    如上所述,我们可以使用
    element['class']
    获取元素的类(属性)。我们发现,
    element.class
    调用
    对象#class
    ,为我们提供了
    Selenium::WebDriver::element
    el['class']
    ,在本例中,为我们提供了字符串
    'name'
    。如果对其父元素调用,我们将得到
    “resultItem isFavorite”

    我们可以使用
    element.text
    获取元素的文本<代码>el。在这种情况下,文本将为我们提供
    'f,f'
    。与此类似,它返回元素及其所有子元素的文本,因此在父元素上调用
    text()
    也会得到
    'f,f'
    。请注意,此方法可能会很慢,如果元素以某种方式不可见,则将返回空字符串。小心使用。有关更多信息,请参阅

    鉴于上述情况,让我们看看方法1和方法2的效果如何。(以下是Ruby 1.9.3。)

    方法#1

    方法#2

    方法#2,重构

    if @driver.find_elements(:css, 'li.isFavorite').any? { |item| item.text == 'f,f' }
      # PASS
    else
      # FAIL
    end
    
    红宝石

    element.attribute("attribute name")
    
    Python

    element.get_attribute("attribute name")
    
    Java

    element.getAttribute("attribute name")
    
    C#


    嗨,吉姆,我试着得到它的属性和变体。但它不断提出“未定义的方法”。我将继续寻找ruby get_属性的等价物。不过,我确实找到了解决这个问题的另一种方法。实际需要的ruby方法是.attribute()。为了反映这一点,我已经更正了答案中的示例代码。请记住,您总是可以在@SSchneid上找到Ruby的API文档,因此它是一个注释,这意味着我无法返回并编辑它。此外,这是一个超过4年的评论。该项目早已从谷歌代码转移到GitHub。
    element.get_attribute("attribute name")
    
    element.getAttribute("attribute name")
    
    element.GetAttribute("attribute name");