You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过XPath/CSS选择器点击结账流程的Continue按钮求助

结账流程回归测试:点击Continue按钮失败问题

我用Python编写结账流程的回归测试,在Attendee Info页面尝试点击Continue按钮时抛出NoSuchElementException异常,已尝试通过XPath、CSS Selector、Link Text三种方式定位该按钮,但均失败。

测试代码

import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(ChromeDriverManager().install())

username = 'bmendenhall@sans.org'
password = 'Lloydcole2!'
welcome = 'Welcome'
firstname = 'Bruce'
lastname = 'Parker'
phone = '555-555-5555'
email = 'bmendenhall+regression@sans.org'

wait = WebDriverWait(driver, 10)

driver.get('https://www.sans.org/')
driver.find_element(By.CSS_SELECTOR, "a[aria-label='Log In']").click()
driver.find_element(By.CSS_SELECTOR, "input[id='username']").send_keys(username)
driver.find_element(By.CSS_SELECTOR, "input[id='password']").send_keys(password)
driver.find_element(By.CSS_SELECTOR, "input[id='regularsubmit']").click()
time.sleep(3)
driver.get('https://www.sans.org/')

trainandcert = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "li[aria-label='Train and Certify']")))
ActionChains(driver).move_to_element(trainandcert).perform()

courses = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "li[aria-label='Courses']")))
ActionChains(driver).move_to_element(courses).click().perform()

driver.find_element(By.CSS_SELECTOR, "a[aria-label='Pricing & Training Options']").click()
driver.get('https://www.sans.org/cyber-security-courses/hacker-techniques-incident-handling/#training-and-pricing')

time.sleep(3)

# Need to add item to cart
driver.find_element(By.CSS_SELECTOR, "a[class='course-run-section-button button button--small button--light button--primary']").click()

time.sleep(3)
# Add on Cart
# button = driver.find_element(By.XPATH, "/html/body/div[6]/div[2]/div/div[1]/div/div/c-rckt-cart/div/lightning-layout/slot/lightning-layout-item[2]/slot/c-rckt-order-summary/div/div/div/lightning-button/button")
# driver.execute_script("arguments[0].click();", button)
time.sleep(30)

driver.find_element(By.XPATH, "//button[@title='proceed to checkout']").click()

time.sleep(10)

driver.find_element(By.XPATH, "//*[@id='input-72']").clear()
driver.find_element(By.XPATH, "//*[@id='input-72']").send_keys(firstname)
driver.find_element(By.XPATH, "//*[@id='input-74']").clear()
driver.find_element(By.XPATH, "//*[@id='input-74']").send_keys(lastname)
driver.find_element(By.XPATH, "//*[@id='input-80']").clear()
driver.find_element(By.XPATH, "//*[@id='input-80']").send_keys(phone)
driver.find_element(By.XPATH, "//*[@id='input-84']").clear()
driver.find_element(By.XPATH, "//*[@id='input-84']").send_keys(email)
driver.find_element(By.XPATH, "//*[@id='input-86']").clear()
driver.find_element(By.XPATH, "//*[@id='input-86']").send_keys(email)

#Attempt to Click Continue via XPath
# driver.find_element(By.XPATH, "//*[@title='continue']").click()

#Attmpt to Click Continue via CSS Selector
driver.find_element(By.CSS_SELECTOR, "button[title='continue']").click()

#Attmpt to Click Continue by button Name
# driver.find_element(By.LINK_TEXT, "Continue").click()

time.sleep(30)

driver.close()

错误信息

Traceback (most recent call last):
  File "/Users/BMendenhall/Desktop/Projects/sans-domain-testing/XTAL-403.py", line 69, in <module>
    driver.find_element(By.CSS_SELECTOR, "button[title='continue']").click()
  File "/Library/Python/3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 857, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "/Library/Python/3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 435, in execute
    self.error_handler.check_response(response)
  File "/Library/Python/3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: 消息:找不到元素:无法定位元素:{"method":"css selector","selector":"button[title='continue']"}
  (会话信息:chrome=107.0.5304.87)

解决建议

  • 修正定位符大小写:检查按钮实际title属性,若为大写开头的Continue,则定位符需改为button[title='Continue']或//*[@title='Continue']
  • 改用显式等待:替换固定time.sleep(),等待元素可点击后再操作:
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[title='Continue']"))).click()
    
  • 检查iframe嵌套:若按钮在iframe内,需先切换到对应iframe:
    driver.switch_to.frame("iframe-id或索引")
    # 执行点击操作后切回主文档
    driver.switch_to.default_content()
    
  • JS强制点击:若元素被遮挡,用JS绕过前端交互限制:
    button = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button[title='Continue']")))
    driver.execute_script("arguments[0].click();", button)
    

内容的提问来源于stack exchange,提问作者Brad Mendenhall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:15:34