我最近尝试使用selenium RC的 GetAttribute 方法,但立即遇到了挑战。我试图执行一个非常简单的selenium.GetAttribute("//a/@href")
,但是代码抛出了一个SeleniumException,消息是“ERROR:找不到元素属性:// a / @ href”。
通过用selenium.GetText("//a[@href]")
代替 GetAttribute 调用,我确认一个元素肯定存在,因为这个语句正确地返回了链接的文本。
然后我尝试了:
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"
定位器,按下查找按钮会产生这个丑陋的消息:“找不到[错误]定位器:xpath = // a / @ href,error = [Exception ...”无法转换JavaScript参数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-their )。在下表中的6个插槽中,我成功地解决了其中3个插槽,并且第4个似乎是一个错误。 其余两个广告位是否有解决方案?
Type 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#中的目标代码)
答案 0 :(得分:4)
Selenium RC的GetAttribute
方法返回元素\属性定位器的值。这些定位器的一般形式是
"[locator (id, xpath, css, etc)]@[attribute name]"
例如
"SaveButton@href"
返回标识为href
的元素的SaveButton
属性的值。也可以使用Xpath定位器:
"xpath=//a[contains(@id, 'SaveButton')]@href"
返回其id包含文本href
的元素的SaveButton
属性的值。
回答你的问题,
1:我真的不知道,这是Selenium设计师的问题。
2:Selenium命令执行几个不同的“上下文”。在某些命令中,document
指的是正在测试的网页,在其他命令中,document
指的是包含Selenium框架的页面(我相信testRunner.html)。
3:错误消息显示找不到您请求的元素。如果实际存在错误,那么之后的信息可能对Selenium团队有用,但对您没有影响。信息越多越好,对吗?
答案 1 :(得分:0)
getAttribute
java.lang.String getAttribute(java.lang.String attributeLocator)
Gets the value of an element attribute.
Parameters:
attributeLocator - an element locator followed by an @ sign and then the name of the attribute, e.g. "foo@bar"
Returns:
the value of the specified attribute
所以你应该说selenium.GetAttribute("locator@href")
定位器是id或name。如果你的元素没有id或name,你应该使用xpath,selenium.GetAttribute("xpath=/html/body/a/@href")
,就像你已经成功尝试过一样。