我已经看到了一些如何在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)
有什么想法吗?
答案 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的字符串”