Rumah >hujung hadapan web >tutorial css >Mengapa 'span:contains('string')' Gagal dalam Selenium dengan Firefox, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa 'span:contains('string')' Gagal dalam Selenium dengan Firefox, dan Bagaimana Saya Boleh Membetulkannya?

DDD
DDDasal
2024-12-29 04:29:10688semak imbas

Why Does

SelectorException Tidak Sah Berlaku dengan "span:contains('string')" dalam Selenium dengan Firefox

Apabila cuba mencari elemen dengan CSS pemilih dalam Selenium Python dengan Firefox, ungkapan "span:contains('Control panel')" mungkin menghadapi InvalidSelectorException dengan mesej "Diberi ungkapan pemilih CSS 'span:contains('Control panel')' adalah tidak sah."

Seperti yang dijelaskan dalam isu GitHub #987 dan #1547, :contains pseudo-class tidak disokong dalam spesifikasi CSS dan akibatnya tidak diiktiraf oleh Firefox. Kelas pseudo ini adalah sebahagian daripada enjin pemilih Sizzle yang digunakan dalam Selenium 1.0, tetapi WebDriver tidak menyokong pemilih CSS gaya Sizzle.

Untuk penyemak imbas yang tidak menyokong pemilih CSS secara asli (seperti IE7 dan IE8), :contains mungkin masih berfungsi, membawa kepada ketidakkonsistenan merentas pelayar yang berbeza. Pendekatan yang lebih dipercayai ialah menggunakan atribut lain bagi teg span, seperti:

element = "span[attribute_name=attribute_value]"

Penyelesaian Alternatif:

Jika elemen yang dimaksudkan ialah span dengan teks "Panel kawalan," anda boleh menggunakan salah satu daripada ungkapan XPath berikut berdasarkan DOM yang lazim Pokok:

  • Menggunakan teks():

    element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
  • Menggunakan mengandungi():

    element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
  • Menggunakan normalize-space():

    element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")

Menggunakan jQuery:

jQuery juga menyokong :contains pseudo-class, membenarkan anda untuk menggunakan ungkapan berikut:

$('span:contains("Control panel")')

Tambahan Nota:

Ingat bahawa pemilih CSS tidak disokong secara asli oleh konsol penyemak imbas, tetapi jQuery menyokongnya melalui pintasan $('...'), yang biasanya mengatasi kaedah document.querySelector lalai.

Atas ialah kandungan terperinci Mengapa 'span:contains('string')' Gagal dalam Selenium dengan Firefox, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn