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:见下文
为了给出更好的答案,我需要更多关于我们正在测试的页面组成的信息。我做了一些基本假设:
- 该页面有一个或多个
元素,这些元素具有classli
,其中一些元素还具有class'resultItem'
'isFavorite'
- 每个
元素都有一个或多个子元素,其中一个子元素保证是类为li
的'name'
div
- 只有一个子
将具有文本div
'f,f'
div
,然后验证它的父li
具有类“isFavorite”
li
元素,然后验证其中一个是否包含相关的div
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");