18

Seleniumで同じテキストの乗算ボタンをクリックすることはできますか?

テキスト = ここでこの結果のロックを解除

4

4 に答える 4

26

すべてのボタンをテキストで検索し、ループclick()内の各ボタンに対してメソッドを実行できます。 この SO回答を使用すると、次のようになります。for

buttons = driver.find_elements_by_xpath("//*[contains(text(), 'My Button')]")

for btn in buttons:
    btn.click()

また、Selenium の優れたラッパーであるSplinterもご覧になることをお勧めします。

Splinter は、Selenium、PhantomJS、zope.testbrowser などの既存のブラウザー自動化ツールの上にある抽象化レイヤーです。これには、Web アプリケーションの自動テストを簡単に作成できる高レベル API があります。

于 2016-02-18T00:12:46.247 に答える
2

<button>テキストで要素を見つけてクリックするには、次のLocator Strategiesのいずれかを使用できます。

  • xpathと の使用text():

    driver.find_element_by_xpath("//button[text()='button_text']").click()
    
  • xpathと の使用contains():

    driver.find_element_by_xpath("//button[contains(., 'button_text')]").click()
    

理想的には、テキストで要素を見つけてクリックするには、 WebDriverWait<button>誘導する必要があり、次のLocator Strategiesのいずれかを使用できます。element_to_be_clickable()

  • XPATHと の使用text():

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='button_text']"))).click()
    
  • XPATHと の使用contains():

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'button_text')]"))).click()
    
  • :次のインポートを追加する必要があります:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

アップデート

テキストですべての<button>要素を見つけるには、次のロケーター戦略のいずれかを使用できます。

  • xpathと の使用text():

    for button in driver.find_elements_by_xpath("//button[text()='button_text']"):
      button.click()
    
  • xpathと の使用contains():

    for button in driver.find_elements_by_xpath("//button[contains(., 'button_text')]"):
      button.click()
    

理想的には、テキストによってすべての要素を見つけるには、WebDriverWait<button>誘導する必要があり、次のLocator Strategiesのいずれかを使用できます。visibility_of_all_elements_located()

  • XPATHと の使用text():

    for button in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//button[text()='button_text']"))):
      button.click()
    
  • XPATHと の使用contains():

    for button in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//button[contains(., 'button_text')]"))):
      button.click()
    
  • :次のインポートを追加する必要があります:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
于 2021-01-09T17:16:27.720 に答える