34

要素をクリックして画面をポップアップし、その中のテキストをコピーする以下のコードがあります

el1 = driver.find_element_by_id("keyDev-A")
el1.click()
el2 = driver.find_element_by_class_name("content")
print(el2.text)

seleniumただし、そのポップアップ内のボタンをクリックしようとすると、

el3 = driver.find_element(By.CLASS_NAME, "action-btn cancel alert-display")
el3.click()

次のエラー メッセージが表示されます。

invalid selector: Compound class names not permitted

seleniumこれは、私がクリックしようとしている HTML です。Closeボタン。

<div class="nav">
    <span class="action-btn confirm prompt-display">Confirm</span>
    <span class="action-btn cancel prompt-display">Cancel</span>
    <span class="action-btn cancel alert-display">Close</span>
</div>

閉じるボタンel3をクリックするには、どのように記述すればよいですか?

4

4 に答える 4

65

レオンのコメントは、複合クラス名がサポートされなくなったという正しい情報につながります。代わりにできることは、css セレクターを使用することです。あなたの場合、次のコード行は、必要な要素を取得するのに役立ちます。

el3 = driver.find_element_by_css_selector(".action-btn.cancel.alert-display")

class 属性に 3 つのクラス (action-btn、cancel、alert-display) がすべて含まれる要素を見つけます。クラスの順序はここでは重要ではなく、どのクラスも class 属性のどこにでも表示されることに注意してください。要素に 3 つのクラスがすべて含まれている限り、その要素は選択されます。クラスの順序を固定したい場合は、次の xpath を使用できます。

el3 = driver.find_element_by_xpath("//*[@class='action-btn cancel alert-display']") 
于 2016-06-12T09:47:38.557 に答える
0

このエラーメッセージ...

invalid selector: Compound class names not permitted

... Seleniumを使用している間は、複合クラス名を使用したロケーター戦略が無効であることを意味します。

この変更の痕跡は、Selenium v​​2.40.0変更リストから確認できます。変更ログには、複合クラス名の使用に適切なエラー コードを追加することが記載されています。

  • 無効な css セレクターの空のクラス名、およびアトムの複合クラス名の場合の適切なエラー コードを実装しました。

解決

別の方法として、次のロケーター戦略のいずれかを使用できます。

  • 使用CSS_SELECTOR:

    driver.find_element(By.CSS_SELECTOR, "span.action-btn.cancel.alert-display").click()
    
  • 使用XPATH:

    driver.find_element(By.XPATH, "//span[@class='action-btn cancel alert-display']").click()
    

参考文献

関連する詳細な議論のいくつかは、次の場所にあります。

于 2021-01-30T10:33:18.130 に答える