2012-01-06 15 views
0

もう一度お願いします。 これは、私がinnerHTMLで見るものに基づいて構築しているSelenium CSS Locatorに関するものです。私の質問は簡単です:CSSロケータに入ることができる許可された属性とはどのように厳格にするのですか?上記のHTMLのためにHTMLSelenium CSS Locatorすべての属性オプションが厳密に指定されている場合と指定されていない場合

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

ため例えば

、CSSは簡単にそれぞれ構築することができます:

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

私はonclickを、無効属性としてサポートされていない、ということを発見したよう。だから、そこに行く!どのlocatorTypeを選択するかはどのようにして知ることができますか?

私の2番目の質問ですが、私は本当に厳密にロケータを見つけることを望みます。 は例えば、 は、私はこれは私が厳格であることによって何を意味するかである

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

+0

は固定しました質問!!しかし、私はまだ私の質問への答えを知らない – abarik

答えて

0

disabled pseudo-classがある:

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

that documentから、あなたは本当にCSSが表現する責任があり、論理的である(のonclickや他のイベントで選択することはできませんようですjsイベントではありません)。なぜXPathを使ってみませんか?私が思う、次のように

あなたの最後の質問を書き換えることができます

css=input[type="text"]このHTML <input type="text">とが一致しないこの<input type="text" disabled="disabled">

私の知る限りでは、このような「厳格な」マッチングはありません。必要な要素(css=input:enabled[type="text"]またはcss=input:not(:disabled)[type="text"])と一致する完全なセレクタを指定する必要があります。

+0

文書のリンクのおかげで – abarik

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属性は全体で一意でなければなりません全体のWebページ。しかし、これは必ずしも当てはまるわけではありません。なぜなら、開発者が2つ以上の同じid値を使用するのを止めることはできないからです。

idをユニークな属性として使用すると、自動化コードを短く、きれいに保つことができ、「ホームページにID属性が重複しています」などのバグを報告できます。あなたのセレクタにマッチするonclickするため

は次のようになります。

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

Xpathは遅く、なぜそれを使用していないthatsです。しかし、xpathの知識のために多くのおかげで – abarik

関連する問題