ホームページ >ウェブフロントエンド >CSSチュートリアル >Firefox の Selenium で「span:contains('string')」が失敗する理由と修正方法

Firefox の Selenium で「span:contains('string')」が失敗する理由と修正方法

DDD
DDDオリジナル
2024-12-29 04:29:10688ブラウズ

Why Does

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。