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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:40:41