Web自动化测试:如何随机选择门店与时间列表选项?
解决Selenium中随机选择门店和时间选项的问题
一、随机选择门店(自定义下拉列表)
你的门店列表是点击按钮展开的自定义ul/li结构,要实现随机选择,需先获取所有可选门店选项,再随机挑选一个点击:
替换原代码中固定选择门店的片段,改为:
# 点击门店按钮展开列表 outlet_button.click() # 等待门店列表加载完成(用显式等待替代sleep,更稳定) WebDriverWait(driver, 10).until( lambda d: d.find_elements(By.XPATH, "//*[@id='edit-hours']/div/div/div[3]/ul/li") ) # 获取所有门店选项元素,过滤掉空文本选项 outlet_options = [opt for opt in driver.find_elements(By.XPATH, "//*[@id='edit-hours']/div/div/div[3]/ul/li") if opt.text.strip()] # 随机选择一个门店并点击 random.choice(outlet_options).click() time.sleep(1)
二、随机选择时间(Select下拉组件)
对于原生Select组件,可先获取所有可用选项,再随机选择:
替换原代码中固定选择时间的片段,改为:
select = Select(driver.find_element(By.XPATH, "//*[@id='edit-hours']/div[1]/select")) # 获取所有启用状态的选项,跳过首个默认提示项(若存在) valid_time_options = [opt for opt in select.options if opt.is_enabled()][1:] if valid_time_options: # 随机选择一个时间选项 random_time = random.choice(valid_time_options) select.select_by_value(random_time.get_attribute('value')) else: print("无可用时间选项") time.sleep(1)
完整修改后的代码
注意替换原有的from random import Random为import random:
import random from selenium import webdriver import time from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.ui import Select driver = webdriver.Chrome('chromedriver') driver.get('https://devbusiness.tunai.io/login') time.sleep(2) driver.maximize_window() # 登录操作 username = driver.find_element(By.NAME, "loginUsername"); username.send_keys("kevin@tunai"); password = driver.find_element(By.NAME, "loginPassword"); password.send_keys("xxxxx"); login = driver.find_element(By.XPATH,"//*[@id='app']/div/div/div/div/div/div[2]/form/div[4]/button"); login.submit(); time.sleep(1) driver.get("https://devbusiness.tunai.io/dashboard/my_salon_appointment") time.sleep(1) Button = driver.find_element(By.XPATH,"//*[@id='page-content']/div/div[2]/div/div/div[1]/div/div[1]/button") Button.click() time.sleep(1) # 滚动到目标元素并点击 element = driver.find_element(By.XPATH,"//*[@id='edit-hours']/div/div/div[2]") driver.execute_script("arguments[0].scrollIntoView();", element) time.sleep(1) element.click() # 随机选择门店 outlet_button = driver.find_element(By.XPATH,"//*[@id='edit-hours']/div/div/div[1]") outlet_button.click() WebDriverWait(driver, 10).until( lambda d: d.find_elements(By.XPATH, "//*[@id='edit-hours']/div/div/div[3]/ul/li") ) outlet_options = [opt for opt in driver.find_elements(By.XPATH, "//*[@id='edit-hours']/div/div/div[3]/ul/li") if opt.text.strip()] random.choice(outlet_options).click() time.sleep(1) # 随机选择时间 select = Select(driver.find_element(By.XPATH,"//*[@id='edit-hours']/div[1]/select")) valid_time_options = [opt for opt in select.options if opt.is_enabled()][1:] if valid_time_options: random_time = random.choice(valid_time_options) select.select_by_value(random_time.get_attribute('value')) else: print("无可用时间选项") time.sleep(1) driver.find_element(By.XPATH,"//*[@id='edit-hours']/div[4]/button").click()
额外优化提示
- 优先使用
WebDriverWait显式等待替代time.sleep(),能避免因页面加载延迟导致的元素定位失败问题。 - 若门店列表存在动态加载逻辑,需确保等待所有选项加载完成后再执行随机选择操作。
内容的提问来源于stack exchange,提问作者Carl Carl
相关产品推荐
相关产品推荐

