Seleniumで同じテキストの乗算ボタンをクリックすることはできますか?
4 に答える
すべてのボタンをテキストで検索し、ループ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 があります。
<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