2012-01-06 23 views
0

我需要你的帮助。 因此,这是基于我在innerHTML中看到的Selenium CSS定位器。我的问题很简单:在CSS定位器中可以使用的属性是什么,以及如何使它更加严格?Selenium CSS定位器所有属性选项有严格和不严格

例如,对于HTML

<input id="tbd" type="text" disabled="disabled"> 
<input type="submit" id="b1" value="b11" onclick="javascript: alert('button1')"> 

对于以上HTML,CSS可以很容易地分别建:

css=input[id="tbd"][type="text"][disabled="disabled"] 
css=input[id="b1"][value="b11"][onclick="javascript:alert('button1')"] 

正如我发现,的onclick和残疾人不支持作为属性。所以,你去!我如何知道选择哪种locatorType?

我的第二个问题,我希望在查找定位器时非常严格。 例如, 我希望这个定位

css=input[name="tbd"][type="text"] 

这个HTML

<input name="tbd" type="text"> 

搭配不是这个

<input name="tbd" type="text" disabled="disabled"> 

这就是我的意思是严格的。

任何帮助?

感谢, 阿米特

+1

ID标签应该是在HTML文档中唯一的(http://www.w3schools.com/tags/att_standard_id.asp) – Isaac 2012-01-06 21:49:23

+0

修正了题!!但我仍然不知道我的问题的答案 – abarik 2012-01-06 21:54:05

回答

0

对于禁用的元素有disabled pseudo-class

css=input:disabled[id="tbd"][type="text"] 

that document看来你真的不能用的onclick和其他活动(这是合乎逻辑的选择,CSS是负责代表,不适用于js事件)。为什么不使用XPath呢?

你的最后一个问题可以按如下我想改写:

css=input[type="text"]这个HTML <input type="text">搭配不是这个<input type="text" disabled="disabled">

AFAIK有没有这样的“严格”的匹配。您需要指定仅匹配所需元素的完整选择器:css=input:enabled[type="text"]css=input:not(:disabled)[type="text"]

+0

感谢您的文档链接 – abarik 2012-01-09 17:21:53

0

使用xpath为复杂的选择器,它会为您节省大量的时间和代码。

这是XPath选择使用的例子,但使用不同的库为简洁 (BY_ID_XPATHBY_ID_AND_NOT_DISABLED_XPATH XPath表达式将成为您的硒代码相同):

from lxml import etree 

HTML = """ 
<input id="tbd" type="text" disabled="disabled"> 
<input id="tbd" type="text"> 
""" 

BY_ID_XPATH = '//input[@id="tbd"]' 
BY_ID_AND_NOT_DISABLED_XPATH = '//input[@id="tbd" and not(@disabled)]' 

elements_tree = etree.fromstring(HTML, parser=etree.HTMLParser()) 

elements_tree.xpath(BY_ID_XPATH) 
# matches 2 elements: [<Element input at 102ea1d08>, <Element input at 102ea1db8>] 

elements_tree.xpath(BY_ID_AND_NOT_DISABLED_XPATH) 
# matches 1 element: [<Element input at 102ea1d08>] 

id属性应该是跨独特整个网页。然而,情况并非总是如此,因为没有任何东西可以阻止开发人员使用多个相同的id值。

如果您在项目中有任何权力 - 您可以使用id作为唯一属性,以保持自动化代码简洁,并提交“主页上的重复ID属性”等错误。

onclick您的选择匹配看起来就像这样:

BY_ONCLICK_XPATH = """//input[@onclick="javascript:alert('button1')"]""" 
+0

Xpath很慢,这就是为什么我不使用它。但是非常感谢xpath的知识 – abarik 2012-01-09 17:21:30