Selenium自动化测试——个人博客系统

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 启动 Chrome 浏览器
driver = webdriver.Chrome()

try:
    # 步骤1:进入首页
    driver.get("http://localhost:8080/#/")

    # 步骤2:点击登录按钮
    login_button = driver.find_element_by_xpath("//span[text()='登录']")

    login_button.click()

    # 步骤3:输入账号和密码,点击登录
    username_input = driver.find_element_by_css_selector("input.el-input__inner[placeholder='用户名']")
    password_input = driver.find_element_by_css_selector("input.el-input__inner[placeholder='密码']")
    login_button = driver.find_element_by_xpath("//span[text()='登录']")

    username_input.send_keys("Yingjie")
    password_input.send_keys("123456")
    login_button.click()

    # 等待登录成功
    WebDriverWait(driver, 10).until(EC.url_contains("#/"))

    # 步骤4:点击分类按钮查看文章分类
    category_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//li[@class='el-menu-item' and text()='文章分类']"))
    )
    category_element.click()

    # 步骤5:查看后端分类对应的文章列表
    back_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//h4[@class='me-allct-name' and text()='后端']"))
    )
    back_element.click()

    # 步骤6:点击标签按钮查看标签
    tag_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//li[@class='el-menu-item' and text()='标签']"))
    )
    tag_element.click()

    # 步骤7:查看spring标签对应的文章列表
    spring_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//h4[@class='me-allct-name' and text()='springmvc']"))
    )
    spring_element.click()

    # 步骤8:查看文章详情
    try:
        # 使用 CSS 选择器定位文章标题链接元素
        article_link = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '.me-article-header > a.me-article-title'))
        )

        article_link.click()

    except Exception as e:
        print("发生异常:", e)

    # # 步骤8:查看文章归档列表
    # articles_element = WebDriverWait(driver, 20).until(
    #     EC.presence_of_element_located((By.XPATH, "//li[@class='el-menu-item is-active' and text()='文章归档']"))
    # )
    # articles_element.click()

    # 步骤9:写文章
    write_element = driver.find_element_by_xpath("//li[@class='el-menu-item' and contains(text(),'写文章')]")
    write_element.click()
    # 获取输入标题元素
    try:
        # 使用显式等待确保元素加载
        wait = WebDriverWait(driver, 10)  # 等待最多10秒
        title_textarea = wait.until(
            EC.presence_of_element_located(
                (By.XPATH, "//div[@class='me-write-input el-textarea']/textarea[@placeholder='请输入标题']"))
        )

        # 一旦找到,执行相关操作
        title_textarea.send_keys("Selenium测试3")
    except TimeoutException:
        print("超时,未找到元素")
    # 输入文章内容
    try:
        # 使用显式等待确保元素加载
        wait = WebDriverWait(driver, 10)  # 等待最多10秒
        textarea = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "textarea[placeholder='开始编辑...']"))
        )

        # 一旦找到,执行相关操作,输入文本
        textarea.send_keys("这是我要输入的文本")

    except Exception as e:
        print("发生异常:", e)
    # 点击发布
    try:
        # 定位父元素
        parent_element = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.CLASS_NAME, "me-write-btn"))
        )
        # 在父元素中查找发布按钮
        publish_button = parent_element.find_element(By.XPATH, "//span[contains(text(), '发布')]")
        # 点击发布按钮
        publish_button.click()

    except Exception as e:
        print("发生异常:", e)
    # 摘要
    try:
        # 使用 CSS 选择器定位文本框元素
        summary_textarea = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, 'textarea[placeholder="请输入摘要"]'))
        )

        # 在文本框中输入内容
        summary_textarea.send_keys("测试")
    except Exception as e:
        print("发生异常:", e)
    # 下拉框
    try:
        # 等待下拉框可点击
        dropdown = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".el-input__inner")))

        # 点击下拉框以展开选项
        dropdown.click()

        # 等待下拉框选项出现
        dropdown_option = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='后端']")))

        # 选择下拉框的值
        dropdown_option.click()

    except Exception as e:
        print("发生异常:", e)

    # 标签
    try:
        # 等待文章标签元素可见
        tag_checkbox = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.XPATH, "//span[text()='springboot']")))

        # 点击文章标签复选框
        tag_checkbox.click()

    except Exception as e:
        print("发生异常:", e)

    # 发布
    try:
        # 使用 XPath 定位 "发布" 按钮元素
        publish_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable(
                (By.XPATH, '//button[contains(@class, "el-button--primary") and .//span[contains(text(), "发布")]]'))
        )

        # 点击发布按钮
        publish_button.click()

    except Exception as e:
        print("发生异常:", e)

    # 步骤10:评论
    try:
        # 使用 XPath 定位评论文本框元素
        comment_textarea = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located(
                (By.XPATH, '//div[contains(@class, "me-view-comment-text")]//textarea[@placeholder="你的评论..."]'))
        )

        # 在评论文本框中输入内容
        comment_textarea.send_keys("这是我的评论。")

    except Exception as e:
        print("发生异常:", e)

    # 提交评论
    try:
        # 使用 CSS 选择器定位评论按钮元素
        comment_button = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, 'button.el-button.el-button--text span'))
        )

        # 使用 JavaScript 执行点击操作
        driver.execute_script("arguments[0].click();", comment_button)

    except Exception as e:
        print("发生异常:", e)

finally:
    # 关闭浏览器
    driver.quit()

 

posted @ 2024-05-07 09:32  CherriesOvO  阅读(26)  评论(0编辑  收藏  举报