Selenium Web驱动程序使用Ruby从标签的for属性获取文本

时间:2015-04-07 20:38:47

标签: ruby selenium xpath

我已经看到了一些如何在Javascript或python中执行此操作的示例,但我正在寻找如何在标签上查找for属性的文本。 e.g。

<label for="thisIsTheTextNeeded">LabelText</label> 
<input type="checkbox" id=thisIsTheTextNeeded">

我们想从label元素的for属性中获取文本。然后使用该文本作为id来查找复选框。

.NET解决方案可能如下所示:

textWeNeed = selenium.getAttribute("//label[text()='LabelText']/@for");

我在Ruby中试过这个:

textWeNeed =
@browser.find_element("xpath//label[text()='LabelText']/@for")

并收到错误:

  

期望“xpath // label [text()= input_value] / @ for”:字符串以响应#shift(ArgumentError)

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

以下是我修复它的方法。谢谢你的帮助!

element = @browser.find_element(:xpath=>"//label[text()=\'#{input_value}\']")
attrValue = element.attribute('for') listElement =
@browser.find_element(:id=>"#{attrValue}")

答案 1 :(得分:0)

您应该使用属性方法来获取属性的值。请参阅doc

element = @browser.find_element(:xpath, "//label[text()='LabelText']")
attrValue = element.attribute("for")

根据OP的评论并提供html我认为该元素需要一些显式等待

wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds

element = wait.until { @browser.find_element(:xpath => "//label[contains(text(),'My list name')]") }
attrValue = element.attribute("for")

答案 2 :(得分:0)

find_element函数需要Hash才能使用xpath进行搜索。

正确的方法就在这里,

textWeNeed =
@browser.find_element(xpath: "xpath//label[text()='LabelText']/@for")

下面是错误的方法(你的代码)。

textWeNeed =
@browser.find_element("xpath//label[text()='LabelText']/@for")

答案 3 :(得分:0)

我在Ruby中寻找最佳使用字符串时发现的是:find:而不是:find_element:

textWeNeed = @browser.find("xpath//label[text()='LabelText']/@for")

出现错误:“响应#shift的字符串”