我最近尝试使用 selenium RC 的 获取属性 方法,但立即遇到了挑战。我试图执行一个非常简单的 selenium.GetAttribute("//a/@href")
但是代码抛出了一个带有消息“错误:找不到元素属性://a/@href”的SeleniumException。
通过替换 selenium.GetText("//a[@href]")
代替 获取属性 调用,我确认一个元素确实存在,因为这个语句正确地返回了链接的文本。
然后我尝试:
selenium.GetAttribute("document.getElementsByTagName('a')[0].getAttribute('href')")
- 同样的问题;错误消息略有不同(并且错误消息缺少最后一个括号):“错误:元素 document.getElementsByTagName('a')[0].getAttribute('href' not found”。请注意,这个确切的表达式在 Firebug 中可以正常工作控制台。selenium.GetText("xpath=/html/body/a[@href]")
确认存在然后selenium.GetAttribute("xpath=/html/body/a/@href")
获取属性 - 它起作用了! 而手册明确指出亲戚 xpath 定位器不需要明确的定位器类型(即“xpath=”前缀),它对 保持沉默绝对 xpath 定位器;我由此解释,前缀是必需的。但是出于好奇,我回到我的相对表达式并添加了显式前缀--更改
selenium.GetAttribute("//a/@href")
至 selenium.GetAttribute("xpath=//a/@href")
- 这也有效!最后,我用非常方便的实验查找 Selenium IDE 中的按钮显示它对元素很好,但对属性失败。我可以理解突出显示属性没有意义,因为属性不是可见的页面元素,但为什么不突出显示包含该属性的元素,并将其设置为不同的颜色?也许不是一项微不足道的任务......
我的问题:
我将上述实验的结果提炼为这些问题;这就是我在这里发帖的全部目的!这些对我来说似乎都是一个错误,但如果您认为我的用法不正确或有解决方法,请告诉我:
"xpath=//a/@href"
定位器,按下“查找”按钮会产生以下丑陋的消息:“[error] locator not found: xpath=//a/@href, error = [Exception...”Could not convert JavaScript argument arg 0 [inIFlasher.scrollElementIntoView]” nsresult : "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"位置: "JS 框架::chrome://selenium-ide/content/selenium-runner.js::showElement::line 386"data: no]"还要求您输入以下内容: 我想要的每个测试的模式是 (A) 获取文本 (locator-for-element-with-attribute) 来确认元素的存在,然后 (B) 获取属性 (属性本身的定位器)。在下表中的 6 个插槽中,我成功解决了其中的 3 个,如详细说明,第 4 个似乎是错误。 剩下的两个插槽有解决方案吗?
键入 GetText 获取属性
XPath//a[@href] xpath=//a/@href
CSS css=a[href] ??
DOM ?? document.getElementsByTagName('a')[0].getAttribute('href')
(详细信息:Selenium RC 版本 1.0.3,浏览器:Firefox 3.6.13,我的目标代码为 C#)
最佳答案
Selenium RC GetAttribute
方法返回 值 元素\属性定位器。这些定位器的一般形式是
"[locator (id, xpath, css, etc)]@[attribute name]"
例如
"SaveButton@href"
返回
href
的值id 为 SaveButton
的元素上的属性.也可以使用 Xpath 定位器:"xpath=//a[contains(@id, 'SaveButton')]@href"
返回
href
的值id 包含文本的元素的属性 SaveButton
.要回答您的问题,
document
指被测网页,在其他命令中,document
指的是包含 Selenium 框架的页面(我相信是 testRunner.html)。 关于c# - Selenium 的 GetAttribute 方法的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5171205/