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()

我还建议您看一下Splinter,它是 Selenium 的一个很好的包装器。

Splinter 是现有浏览器自动化工具(如 Selenium、PhantomJS 和 zope.testbrowser)之上的抽象层。它有一个高级 API,可以轻松编写 Web 应用程序的自动化测试。

于 2016-02-18T00:12:46.247 回答
7

我在html中有以下内容:

driver.find_element_by_xpath('//button[contains(text(), "HELLO")]').click()
于 2018-08-21T21:49:13.500 回答
2

要通过文本定位并单击<button>元素,您可以使用以下任一定位器策略

  • 使用xpathtext()

    driver.find_element_by_xpath("//button[text()='button_text']").click()
    
  • 使用xpathcontains()

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

理想情况下,要通过它的文本定位并单击一个<button>元素,您需要诱导WebDriverWait并且element_to_be_clickable()您可以使用以下任一Locator Strategies

  • 使用XPATHtext()

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

    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>元素,您可以使用以下任一Locator Strategies

  • 使用xpathtext()

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

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

理想情况下,要<button>通过您需要诱导WebDriverWait的文本定位所有元素visibility_of_all_elements_located(),您可以使用以下任一Locator Strategies

  • 使用XPATHtext()

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

    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 回答
1

@nobodyskiddy,尝试使用driver.find_element(如果您有单个按钮选项),在使用click()时使用索引driver.find_elementsfind_elements会将数组返回到 Web 元素值,因此您必须使用索引来选择或单击。

于 2019-05-07T03:11:39.507 回答