http/chrome_test.js

199 lines
4.8 KiB
JavaScript
Raw Permalink Normal View History

2025-07-21 00:09:21 +08:00
import http from 'apigo.cc/gojs/http'
import co from 'apigo.cc/gojs/console'
import u from 'apigo.cc/gojs/util'
import fs from 'apigo.cc/gojs/file'
let t1, t2
function printOK(...testResult) {
t2 = u.timestampMS()
co.info('. >> 成功', '耗时[' + (t2 - t1) + ']', !testResult ? '' : testResult.join(' '))
t1 = t2
}
co.log("开始测试...")
t1 = u.timestampMS()
co.log("启动Chrome浏览器...")
let ch = http.startChrome()
printOK("Chrome启动成功")
var page
co.log("打开z20首页...")
page = ch.open("https://z20.cc/")
printOK()
co.log("设置视口大小...")
page.setViewport(1280, 720)
printOK("1280×720")
co.log("获取当前URL...")
let url = page.url()
printOK(url)
co.log("获取页面标题...")
const title = page.title()
printOK(title.substring(0, 15) + (title.length > 15 ? "..." : ""))
co.log("导航到Apigo.cc首页...")
page.navigate("https://apigo.cc")
printOK()
co.log("获取当前URL...")
url = page.url()
printOK(url)
co.log("获取资源列表...")
let res = page.getResList()
printOK(`资源列表(${res.length})获取成功`)
co.log("获取资源列表按类型script...")
res = page.getResListByType("script")
printOK(`资源列表(${res.length})获取成功`)
co.log("获取资源列表按MimeType...")
res = page.getResListByMimeType("text/*")
printOK(`资源列表(${res.length})获取成功`)
co.log("获取资源内容...")
let content = page.getResContent(res[0].url)
printOK(`资源(${res[0].url})内容(${content.length}/${res[0].size})获取成功`)
co.log("执行后退操作...")
page.back()
printOK()
co.log("获取当前URL...")
url = page.url()
printOK(url)
co.log("执行前进操作...")
page.forward()
printOK()
co.log("获取当前URL...")
url = page.url()
printOK(url)
co.log("滚动页面...")
page.scrollTo(0, 500)
printOK()
co.log("查找Logo...")
const logo = page.find(".logo")
printOK("已找到")
co.log("检查Logo可见性...")
printOK(logo.isVisible())
co.log("获取Logo 尺寸...")
printOK(logo.getAttribute("width"), logo.getAttribute("height"))
co.log("获取Logo alt...")
printOK(logo.getAttribute("alt"))
co.log("获取Logo URL...")
printOK(logo.getAttribute("src"))
co.log("获取Logo位置信息...")
const rect = logo.getBoundingRect()
printOK(`X:${rect.x} Y:${rect.y} W:${rect.width} H:${rect.height}`)
co.log("导航到Apigo.cc探索页...")
// page = ch.open("https://apigo.cc/explore/repos")
page.navigate("https://apigo.cc/explore/repos")
printOK()
co.log("获取当前URL...")
url = page.url()
printOK(url)
co.log("查找搜索框...")
var searchInput = page.findN("input[type=search]")
if (!searchInput) {
return "搜索框不存在"
}
printOK("存在")
co.log("查找搜索框父...")
const parent = searchInput.parent()
printOK("存在", parent.getAttribute('class'))
co.log("查找搜索按钮...")
const searchBtn = parent.find("button")
printOK("存在")
printOK("存在", searchBtn.getAttribute('class') == searchBtn.getProperty('className') ? 'class检查通过' : 'class检查失败')
co.log("查找搜索按钮findChild...")
parent.findChild("button")
printOK("成功")
co.log("查找搜索按钮findX...")
parent.findX("./button")
printOK("成功")
co.log("查找表单...")
const form = searchInput.findParent('form')
printOK("存在", form.getAttribute('id'))
co.log("检查搜索框可交互性...")
printOK(searchInput.isInteractable())
co.log("设置搜索框值...")
searchInput.setValue("ag")
printOK("值已设置")
co.log("等待跳转搜索结果...")
page.waitPageLoad()
searchInput = page.find("input[type=search]")
printOK("完成", page.url())
co.log("获取搜索框值...")
printOK(searchInput.getValue())
co.log("查找所有结果链接...")
var list = page.findAll(".flex-list > .flex-item")
printOK(`找到 ${list.length} 个链接`)
co.log("查找第二个项目的仓库连接...")
const link = list[0].find("a:nth-child(2)")
printOK(link.getAttribute("href"))
co.log("计算按钮中心位置...")
const linkCenter = link.getCenter()
printOK(`X:${linkCenter.x.toFixed(1)} Y:${linkCenter.y.toFixed(1)}`)
co.log("移动鼠标到按钮中心...")
page.mouseMoveTo(linkCenter.x, linkCenter.y)
printOK()
co.log("按下鼠标左键...")
page.mouseClick()
printOK()
co.log("等待搜索结果稳定...")
page.waitPageLoad()
printOK()
co.log("获取当前URL...")
url = page.url()
printOK(url)
co.log("截取页面截图...")
const screenshot1 = page.screenshot()
printOK(`size:${screenshot1.length}`)
// fs.write('./screenshot1.png', screenshot1)
co.log("截取页面截图(全部)...")
const screenshot2 = page.screenshotFullPage()
printOK(`size:${screenshot2.length}`)
// fs.write('./screenshot2.png', screenshot2)
co.log("生成PDF...")
const pdf = page.pDF()
printOK(`size:${pdf.length}`)
// fs.write('./page.pdf', pdf)
co.log("所有测试步骤完成!")
return true