无法通过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
相关产品推荐
相关产品推荐

