用selenium对学习通进行自动化测试

一 前言

1 安装selenium与webdriver

selenium是python的第三方库,pip一下就可以。

对于webdriver,我用的是Edge,去官网下一下

Microsoft Edge WebDriver - Microsoft Edge Developer

如果用的是其他的浏览器,比如Chrome等,同样的操作

下载完之后,

网上有的教程需要配准环境变量等的操作。感觉没必要

把webdriver 解压,得到msedgedriver.exe

把这个放到python 解释器的下面,我的是这样的。

C:\Users\520\AppData\Local\Programs\Python\Python310。

放到python310文件夹里面。

2  po设计模式

po设计模式,说白了,就是对selenium再次进行封装

来端简单的关键字封装

    def locates(self, name, value):
        return self.driver.find_elements(name, value)
    def xpaths(self, value):
        return self.locates(By.XPATH, value)
"""
这段代码本质上就是对find_elements的封装
再结合对xpath进行的封装。
"""

在正文中有许多自己的封装,哈哈哈哈哈,

最后给出用过的。

二 正文

1 登录

是需要输入手机号,密码。

class Xuexitong:
    def __init__(self,n=1):
        self.driver=web()
        self.n=n
# n 后面再说什么意思
# 初始化,得到webdriver对象
    def login(self):
# open 就是对get方法的封装
        self.driver.open('https://passport2.chaoxing.com/login?fid=&newversion=true&refer=http%3A%2F%2Fi.chaoxing.com')
        self.driver.i_put('phone','xxxxx')
# i_put 对id,find_element,send_keys的封装
        self.driver.i_put('pwd','xxxxx')
        self.driver.i_click('loginBtn')
# i_click是id和click的封装

上面过程为:

打开官网->输入手机号>输入密码->点击确定按钮

2 选择课程

    def click_course(self):
        self.driver.wait(1)
# 等待1s time.sleep的封装
        self.driver.switch_frame('frame_content')
# 进入框架,很重要,不然会找不到元素。
# self.n 就是课程的序号,从1到最后,选择自己需要点击的课程
        self.driver.x_click(f'//*[@class="course-list"]/li[{self.n}]/div/a')

3 确定要点击的课程数)

有的课程数是显示的是1,有的是2,很明显排除掉1,点击2。

    def choose_window(self):
# 需要先切换窗口,选择句柄,不妨称为列表窗口
# 不然还是再原来的窗口
        self.driver.switch_handle(-1)
        self.driver.wait(1)
# 进入列表窗口的框架
        self.driver.switch_frame('frame_content-zj')
    def get_course_nums(self):
        course_nums=[]
        self.choose_window()
        course=self.driver.xpaths('//*[@class="chapter_unit"][3]/div[2][1]/ul/li/div/div/div[3]/div/span[1]')
# couser 就是用了xpaths, 得到课程数,返回的是元素
        for t in course:
            value=self.driver.get_text(t)
# 得到内容
            course_nums.append(value)
# 比如是这样的[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2]等的
# 也有可能有3。
        return course_nums

4 点击需要进入的章节

    def main(self):
        self.login()
        self.click_course()
        nums=self.get_course_nums()
# 前面的操作。得到课程数
        for i,t in enumerate(nums):
# 循环
            if t=='2':
# 对章节数的进行后续操作,play操作
                self.play(i+1)

5 play操作

    def play(self,num):
        self.choose_window()
# 选择窗口
        self.start_play(num)
# start_play操作

6 start_play操作

    def start_play(self,num):
        self.driver.x_click(f'//*[@class="chapter_unit"][3]/div/ul/li[{num}]/div/div/div[3]')
# 点击跳转
        self.driver.switch_handle(-1)
# 选择窗口
        self.driver.switch_frame('iframe')
# 进入框架
        self.driver.switch_frame('//*[@id="ext-gen1049"]/iframe')
# 进入框架
        self.driver.wait(2)
        self.driver.x_click('//*[@class="vjs-big-play-button"]')
# 点击播放按钮
        while 1:
# 等待播放完成
            flag = self.get_new_num()
            if flag:
                break
        return False
    def get_new_num(self):
        self.driver.wait(10)
        div = self.driver.xpath(f'//*[@id="reader"]/div')
        get_class = self.driver.get_attr(div, 'class')
        tag_class = 'video-js vjs-default-skin vjs-big-play-centered vjs-controls-enabled vjs-workinghover vjs-v7 vjs-has-started video-dimensions vjs-user-inactive vjs-paused vjs-ended'
        tag_class1='video-js vjs-default-skin vjs-big-play-centered vjs-controls-enabled vjs-workinghover vjs-v7 vjs-has-started video-dimensions vjs-paused vjs-ended vjs-user-inactive'
# 播放完成或有某些标签的变化。仔细寻找
        if get_class == tag_class or get_class==tag_class1:
            self.driver.switch_default()
            self.driver.x_click('//*[@id="contentFocus"]/i')
# 退出按钮
            self.driver.wait(4)
            return True

7 选择窗口

    def choose_window(self):
        self.driver.switch_handle(-1)
        self.driver.wait(1)
        self.driver.switch_frame('frame_content-zj')

上述操作---选择要测试的视频->点击播放->等待播放完成->退出

具体实际可看自己操作,随机应变。

三 源码

from init import web
# 封装导包
class Xuexitong:
    def __init__(self,n=1):
        self.driver=web()
        self.n=n
        self.main()
    def login(self):
        self.driver.open('https://passport2.chaoxing.com/login?fid=&newversion=true&refer=http%3A%2F%2Fi.chaoxing.com')
        self.driver.i_put('phone','xx')
        self.driver.i_put('pwd','xx')
        self.driver.i_click('loginBtn')
    def click_course(self):
        self.driver.wait(1)
        self.driver.switch_frame('frame_content')
        self.driver.x_click(f'//*[@class="course-list"]/li[{self.n}]/div/a')
    def get_course_nums(self):
        course_nums=[]
        self.choose_window()
        course=self.driver.xpaths('//*[@class="chapter_unit"][3]/div[2][1]/ul/li/div/div/div[3]/div/span[1]')
        for t in course:
            value=self.driver.get_text(t)
            course_nums.append(value)
        return course_nums
    def main(self):
        self.login()
        self.click_course()
        nums=self.get_course_nums()
        for i,t in enumerate(nums):
            if t=='2':
                self.play(i+1)
    def play(self,num):
        self.choose_window()
        self.start_play(num)
    def get_new_num(self):
        self.driver.wait(10)
        div = self.driver.xpath(f'//*[@id="reader"]/div')
        get_class = self.driver.get_attr(div, 'class')
        tag_class = 'video-js vjs-default-skin vjs-big-play-centered vjs-controls-enabled vjs-workinghover vjs-v7 vjs-has-started video-dimensions vjs-user-inactive vjs-paused vjs-ended'
        tag_class1='video-js vjs-default-skin vjs-big-play-centered vjs-controls-enabled vjs-workinghover vjs-v7 vjs-has-started video-dimensions vjs-paused vjs-ended vjs-user-inactive'
        if get_class == tag_class or get_class==tag_class1:
            self.driver.switch_default()
            self.driver.x_click('//*[@id="contentFocus"]/i')
            self.driver.wait(4)
            return True
    def start_play(self,num):
        self.driver.x_click(f'//*[@class="chapter_unit"][3]/div/ul/li[{num}]/div/div/div[3]')
        self.driver.switch_handle(-1)
        self.driver.switch_frame('iframe')
        self.driver.switch_frame('//*[@id="ext-gen1049"]/iframe')
        self.driver.wait(2)
        self.driver.x_click('//*[@class="vjs-big-play-button"]')
        while 1:
            flag = self.get_new_num()
            if flag:
                break
        return False
    def choose_window(self):
        self.driver.switch_handle(-1)
        self.driver.wait(1)
        self.driver.switch_frame('frame_content-zj')

def main():
    Xuexitong()

四  封装的代码

看我的github仓库

封装的代码

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
很高兴能为你解答问题。关于Java Selenium对电商网站进行自动化测试的代码,我们可以先简要介绍一下Selenium框架和自动化测试的概念,然后再提供一些简单的代码示例。 Selenium是一个自动化测试框架,其中包含一些用于自动化网页测试的工具和库。Selenium,我们可以使用不同的编程语言(如Java)来自动化测试网页上的交互功能,比如按钮点击、表单填写、数据抓取等。 基本的Selenium测试用例常包含以下步骤: 1. 启动浏览器 2. 访问测试网站 3. 执行测试动作(如模拟鼠标点击、键盘输入等) 4. 验证测试结果 以下是一个简单的Java Selenium测试用例,用于测试一个电商网站的登录功能: ``` import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; public class EcommerceTest { public static void main(String[] args) { // 设置Chrome浏览器驱动路径 System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver"); // 启动Chrome浏览器 WebDriver driver = new ChromeDriver(); // 访问测试网站 driver.get("https://www.ecommerce.com/login"); // 输入用户名和密码 WebElement username = driver.findElement(By.name("username")); username.sendKeys("testuser"); WebElement password = driver.findElement(By.name("password")); password.sendKeys("testpass"); // 点击登录按钮 WebElement loginButton = driver.findElement(By.id("login-button")); loginButton.click(); // 验证是否登录成功 WebElement welcomeMessage = driver.findElement(By.id("welcome-message")); String messageText = welcomeMessage.getText(); if (messageText.equals("Welcome, testuser!")) { System.out.println("登录成功!"); } else { System.out.println("登录失败!"); } // 关闭浏览器 driver.quit(); } } ``` 上述代码中,我们首先设置了Chrome浏览器驱动路径,然后启动了Chrome浏览器。接着访问了一个测试登录页面,并模拟用户在输入用户名和密码后点击登录按钮的操作。最后过验证欢迎消息是否包含正确的用户名来判断登录是否成功。 希望这个简单的示例可以帮助你更好地理解如何使用Java Selenium进行自动化测试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值