【发布时间】:2011-07-07 11:19:13
【问题描述】:
我最近尝试使用 selenium RC 的 GetAttribute 方法,但立即遇到了挑战。我尝试执行一个非常简单的selenium.GetAttribute("//a/@href"),但代码抛出了 SeleniumException,并显示消息 “错误:找不到元素属性://a/@href”。
通过用 selenium.GetText("//a[@href]") 代替 GetAttribute 调用,我确认了一个元素确实存在,因为该语句正确地返回了链接的文本。
然后我尝试了:
- 使用不同的协议(file:/// vs http://)指向不同的网页——同样的问题。
- 使用指向不同属性的不同 xpath 定位器——同样的问题。
- 使用 DOM 定位器
selenium.GetAttribute("document.getElementsByTagName('a')[0].getAttribute('href')")——同样的问题;错误消息略有不同(并且错误消息缺少最后的括号):“错误:元素 document.getElementsByTagName('a')[0].getAttribute('href' not found”。请注意这个确切的表达式在 Firebug 的控制台中可以正常工作。 - 使用绝对而不是相对 xpath 寻址,使用
selenium.GetText("xpath=/html/body/a[@href]")确认存在,然后使用selenium.GetAttribute("xpath=/html/body/a/@href")获取属性 - 它有效!
虽然手册明确指出 relative xpath 定位器不需要明确的定位器类型(即“xpath=”前缀),但它没有提及 absolute xpath 定位器;我从这里解释说前缀是必需的。但出于好奇,我回到我的相对表达式并添加了显式前缀——将selenium.GetAttribute("//a/@href") 更改为selenium.GetAttribute("xpath=//a/@href")——这也有效!
最后,我在 Selenium IDE 中使用非常方便的 Find 按钮进行的实验表明,它可以很好地处理元素,但不能处理属性。我可以理解,因为属性不是可见的页面元素,所以突出显示属性没有意义,但是为什么不突出显示包含该属性的元素,并使其具有不同的颜色呢?也许不是一件小事……
我的问题:
我将上述实验的结果提炼成这些问题;这就是我在这里发帖的全部目的!这些对我来说似乎都是一个错误,但如果您认为我的用法不正确或有解决方法,请告诉我:
- 为什么带有 XPath 定位器类型的 GetAttribute 唯一需要 显式 定位器类型,而其他方法(例如 GetText)不需要?
- 为什么 DOM 定位器失败并出现“未找到”错误? (手册还明确指出 DOM 定位器不需要明确的定位器类型前缀,但我仍然尝试在 DOM 测试中添加“dom=”作为前缀;它仍然失败。)
- 为什么 Selenium IDE 在尝试突出显示(查找)属性时不会更优雅地失败?使用相同的
"xpath=//a/@href"定位器,按下 Find 按钮会产生这条丑陋的消息:“[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)" location: "JS frame :: chrome://selenium-ide/content/selenium-runner.js :: showElement :: line 386" data: no]"李>
您的输入还需要以下内容:我想要的每个测试的模式是 (A) GetText(locator-for-element-with-attribute)确认元素的存在然后 (B) GetAttribute(locator-for-attribute-itself)。在下表中的 6 个插槽中,我成功地解决了其中的 3 个,正如刚才详述的那样,第 4 个似乎是一个错误。 剩下的两个槽有解决方案吗?
类型 GetText GetAttribute 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# 中的目标代码)
【问题讨论】:
标签: c# dom css-selectors selenium-rc xpath