ホームページ >ウェブフロントエンド >CSSチュートリアル >Firefox の Selenium で「span:contains('string')」が失敗する理由と修正方法
Firefox で Selenium の「span:contains('string')」で無効な SelectorException が発生する
CSS で要素を検索しようとするとFirefox での Selenium Python のセレクター、「span:contains('コントロール パネル')」式で InvalidSelectorException が発生し、「指定された CSS セレクター式 'span:contains('コントロール パネル')' は無効です。」というメッセージが表示されることがあります。
GitHub の問題 #987 および #1547 で説明されているように、:contains 擬似このクラスは CSS 仕様でサポートされていないため、Firefox では認識されません。この疑似クラスは Selenium 1.0 で使用される Sizzle セレクター エンジンの一部でしたが、WebDriver は Sizzle スタイルの CSS セレクターをサポートしていません。
CSS セレクターをネイティブにサポートしていないブラウザー (IE7 や IE8 など) の場合、 :contains は引き続き機能する可能性があり、異なるブラウザ間で不一致が発生する可能性があります。より信頼性の高いアプローチは、span タグの別の属性を使用することです。
element = "span[attribute_name=attribute_value]"
代替解決策:
意図した要素が次のようなスパンである場合「コントロール パネル」というテキストでは、一般的な DOM に基づいて次の XPath 式のいずれかを使用できます。ツリー:
テキスト()の使用:
element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
使用contains():
element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
normalize-space() の使用:
element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")
使用中jQuery:
jQuery は :contains 疑似クラスもサポートしており、次の式を使用できます:
$('span:contains("Control panel")')
補足:
CSS セレクターはブラウザー コンソールではネイティブにサポートされていませんが、jQuery は CSS セレクターをサポートしていることに注意してください。 $('...') ショートカット。通常、デフォルトの document.querySelector メソッドをオーバーライドします。
以上がFirefox の Selenium で「span:contains('string')」が失敗する理由と修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。