2012-01-06 22 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