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
Lepaskan: 2024-12-29 04:29:10
asal
707 orang telah melayarinya

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]"
Salin selepas log masuk

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']")
    Salin selepas log masuk
  • Menggunakan mengandungi():

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

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

Menggunakan jQuery:

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

$('span:contains("Control panel")')
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan