selenium+pytest相关习题

发布时间:2026/7/1 20:37:35

selenium+pytest相关习题 一、pytest夹具pytest.fixture def driver(): d webdriver.Chrome(serviceService(./chromedriver.exe)) yield d # 这个d会传给测试函数 d.quit() # 测试结束后自动执行二、相关习题附注pytest用例函数名必须test_开头任务1打开bilibili搜索“地球”30分钟启动Chrome打开https://www.bilibili.com。用 find_element 定位到搜索框输入“地球”。定位搜索按钮点击。def test_bilibili_serch(driver): driver.get(https://www.bilibili.com/) wait WebDriverWait(driver, 10) wait.until(EC.element_to_be_clickable((By.XPATH, //*[idnav-searchform]/div[1]/input))).send_keys(地球) driver.find_element(By.XPATH, //*[idnav-searchform]/div[2]).click() driver2 driver.window_handles driver.switch_to.window(driver2[1]) assert 地球 in driver.title任务2登录一个测试网站45分钟推荐练习站 搜“Selenium 练习网站”或直接用 https://practicetestautomation.com/practice-test-login/ 一个专门用来练登录的。定位用户名框、密码框、登录按钮执行登录。登录成功后找到页面上的“Log out”按钮或某个成功提示文本打印出来。在这里你会遇到等待的痛点登录按钮点了之后页面会跳转如果你不等下一个元素就找不到。试着用显式等待解决。def test_login(driver): driver.get(https://practicetestautomation.com/practice-test-login/) driver.find_element(By.ID, username).send_keys(student) driver.find_element(By.ID, password).send_keys(Password123) driver.find_element(By.ID, submit).click() wait WebDriverWait(driver, 5) text wait.until(EC.element_to_be_clickable((By.XPATH, //*[idloop-container]/div/article/div[2]/div/div/div/a))).text assert text Log out print(text)任务3带数据驱动的登录测试升级90分钟推荐练习站 搜“Selenium 练习网站”或直接用 https://practicetestautomation.com/practice-test-login/ 一个专门用来练登录的。创建一个CSV或Excel文件里面有多组用户名和密码包括正确的和错误的。写一个循环从文件里读取每组数据执行登录然后根据预期结果成功或失败判断测试是否通过并用Python的print输出结果。这是你简历上第一个“自动化测试框架”的雏形非常重要。def get_data_from_excel(file_path): wb openpyxl.load_workbook(file_path) sheet wb.active data [] for row in sheet.iter_rows(min_row2, values_onlyTrue): data.append(row) return data def login_test(driver, username, password): WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.ID, username))).send_keys(username) driver.find_element(By.ID, password).send_keys(password) driver.find_element(By.ID, submit).click() try: WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH, //*[idloop-container]/div/article/div[2]/div/div/div/a))) except TimeoutException: return 登录失败 else: return 登录成功 pytest.mark.parametrize(username, password, result, get_data_from_excel(./testdata_pytest.xlsx)) def test_login(driver, username, password, result): driver.get(https://practicetestautomation.com/practice-test-login/) login_success login_test(driver, username, password) assert login_success result任务4选做进阶使用Page Object模式重构把任务3转换成Page Object 设计模式。很简单就是把“一个页面的所有元素定位和操作”封装成一个类测试脚本只调用类的方法看起来特别清晰易维护。这个模式你只要在面试中能讲出它的好处就能秒杀很多竞争者:好维护‌页面元素变了只用改对应的页面对象类不用改所有测试用例 。‌能复用‌同一个页面的操作方法可以被多个测试用例重复调用减少重复代码 。‌看得懂‌测试用例里全是业务语言不像以前那样夹杂大量技术代码逻辑更清晰class PageLogin: #页面网址 URL https://practicetestautomation.com/practice-test-login/ #元素定位器 USERNAME_INPUT (By.ID, username) PASSWORD_INPUT (By.ID, password) LOGIN_CLICK (By.ID, submit) SUCCESS_FLAG (By.XPATH, //*[idloop-container]/div/article/div[2]/div/div/div/a) #初始化driver def __init__(self, driver): self.driver driver #进入网站 def open(self): self.driver.get(self.URL) #输入账户 def username_enter(self, username): WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable(self.USERNAME_INPUT)).send_keys(username) #输入密码 def password_enter(self, password): self.driver.find_element(*self.PASSWORD_INPUT).send_keys(password) #点击登录按钮 def login_click(self): self.driver.find_element(*self.LOGIN_CLICK).click() #登录 def login_test(self,username, password): self.username_enter(username) self.password_enter(password) self.login_click() try: WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable(self.SUCCESS_FLAG)) except TimeoutException: return 登录失败 else: return 登录成功 def get_data_from_excel(file_path): wb openpyxl.load_workbook(file_path) sheet wb.active data [] for row in sheet.iter_rows(min_row2, values_onlyTrue): data.append(row) return data pytest.mark.parametrize(username, password, result, get_data_from_excel(./testdata_pytest.xlsx)) def test_login(driver, username, password, result): pagelogin PageLogin(driver) pagelogin.open() is_login_success pagelogin.login_test(username, password) assert is_login_success result三、pytest测试用例执行1执行命令pytest my_pytest.py2执行并生成报告命令pytest my_pytest.py --alluredir./report3报告转为html并打开的命令allure serve ./report

相关新闻