自动化测试小技巧之Airtest-Selenium和Excel的无缝协作
👆对私有云感兴趣可以进入公众号回复“私有云”哦。 一、前言 之前在问卷以及Q群上有同学有提出过能否将网页上的一些数据通过 Airtest 去导出生成一份 Excel ,那么我们今天一起讨论一下,我们应该如何去实现,以及当我们获取的数据类型不同的时候,获取的方式该怎么随之调整? 二、知识点介绍 2.1 python下的Excel的操作 之前我们有篇文章有介绍过 poco跟Excel结合使用的案例 ,里面介绍了 Excel 的读写操作,在这里我们是使用了创建 Excel ,写入并保存Excel的操作。 importxlwingsasxw# 创建一个新的Excel工作簿和工作表wb = xw.Book()sheet = wb.sheets[0]#将内容写入Excel内sheet.range((row_index, col_index)).value = cell.text# 保存Excel文件wb.save('output.xlsx')wb.close() 2.2 获取table数据 在网页上看到类似图下的表格内容时,可以在界面点击 F12 唤出页面开发者模式,可以看到表格在 HTML 中的标签为 <table> ,以及在表格中 <tr> 标签是表格的行, <td> 标签是表格的列,我们只需要找到 <table> 标签,将表格内的行列内容以此读取并导出到Excel中或输出即可。 defget_table_data():#获取表格table = driver.find_element(By.XPATH,"//*[@id=\"content\"]/table")# 获取所有行rows = table.find_elements(By.TAG_NAME,"tr")# 行索引row_index =1# 遍历所有行以及每行中的列forrowinrows:# 获取所有列cells = row.find_elements(By.TAG_NAME,"td")# 列索引col_index =1forcellincells:# 写入每个格子的内容到Excel表格sheet.range((row_index, col_index)).value = cell.textcol_index +=1row_index +=1 2.3 获取普通数据内容 如果是要将普通的数据依照一定的规律去进行导出的话,我们可以看一下在浏览器内,数据的表现是怎么样的,例如我们这边用的例子是百度热搜界面,想要将热搜榜导出,我们可以先观察一下热搜榜的 HTML 代码排布,热搜词条是在同一层级下按顺序排布的。 那我们可以看一下在AirtestIDE内获取的语句是否也存在一些规律,可以看到,我们在读取的时候,语句中的其中一个标签的索引值是呈递增的,那我们就可以利用这个特性去进行循环获取我们所需要的内容。 # 循环获取XPath范围内的元素文本内容和链接row_index =1foriinrange(2,11):# 假设你要获取10个元素xpath =f"//*[@id='sanRoot']/main/div/div/div[2]/a[{i}]/div[2]/div[2]/div/div"# 查找元素element = driver.find_element(By.XPATH, xpath)# 获取元素文本内容content = element.text# 获取元素的父链接 (a 标签)parent_element = driver.find_element(By.XPATH, xpath +"/ancestor::a[1]")link = parent_element.get_attribute('href')# 写入Excel表格sheet.range((row_index,1)).value = contentsheet.range((row_index,2)).value = linkrow_index +=1 三、使用Airtest-selenium获取网页上的table内容并生成excel 接下来我们先来看一个导出网页上的 <table> 表格数据到本地Excel表的例子: 参考代码: # -*- encoding=utf8 -*-__author__ ="Airtest"fromairtest.core.apiimport*fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysfromairtest_selenium.proxyimportWebChromefromselenium.webdriver.common.byimportByimportxlwingsasxwdriver = WebChrome()driver.implicitly_wait(20)auto_setup(__file__)defget_table_data():# 获取所有行rows = table.find_elements(By.TAG_NAME,"tr")# 行索引row_index =1# 遍历所有行以及每行中的列forrowinrows:# 获取所有列cells = row.find_elements(By.TAG_NAME,"td")# 列索引col_index =1forcellincells:# 写入每个格子的内容到Excel表格sheet.range((row_index, col_index)).value = cell.textcol_index +=1row_index +=1if__name__ =="__main__":# 打开目标网页driver.get("https://www.runoob.com/python3/python3-os-file-methods.html")table = driver.find_element(By.XPATH,"//*[@id=\"content\"]/table")# 创建一个新的Excel工作簿和工作表wb = xw.Book()sheet = wb.sheets[0]get_table_data()# 保存Excel文件wb.save('output.xlsx')wb.close() 四、使用Airtest-selenium获取网页上的热搜榜并导出标题以及链接 然后我们再来看一个更实用的例子,获取百度热搜榜单内容到本地 Excel 的例子(PS:运营同学甚至可以做成定时脚本,定时收集榜单信息参考,时刻关注热门话题): 参考代码: # -*- encoding=utf8 -*-__author__ ="Airtest"fromairtest.core.apiimport*fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysfromairtest_selenium.proxyimportWebChromeimportxlwingsasxwfromselenium.webdriver.common.byimportBydriver = WebChrome()driver.implicitly_wait(20)auto_setup(__file__)defget_element_content_and_link(xpath, sheet, row_index):try:# 查找元素element = driver.find_element(By.XPATH, xpath)# 获取元素文本内容content = element.text# 获取元素的父链接 (a 标签)parent_element = driver.find_element(By.XPATH, xpath +"/ancestor::a[1]")link = parent_element.get_attribute('href')# 写入Excel表格sheet.range((row_index,1)).value = contentsheet.range((row_index,2)).value = linkrow_index +=1exceptExceptionase:print(f"元素{xpath}未找到:{e}")returnrow_indexif__name__ =="__main__":# 创建一个新的Excel工作簿和工作表wb = xw.Book()sheet = wb.sheets[0]# 打开目标网页driver.get("https://top.baidu.com/board")# 替换为你的目标网页URL# 行索引row_index =1# 循环获取XPath范围内的元素文本内容和链接foriinrange(2,11):# 假设你要获取10个元素xpath =f"//*[@id='sanRoot']/main/div/div/div[2]/a[{i}]/div[2]/div[2]/div/div"row_index = get_element_content_and_link(xpath, sheet, row_index)# 保存Excel文件,覆盖已存在的文件wb.save('output.xlsx')wb.close()# 关闭浏览器driver.quit() 五、小结 本周推文我们主要是讲了 Airtest-selenium 获取网页上两种不同数据并导出到Excel表的情况,主要是介绍了关于 Airtest-selenium 与 Excel 的协作,以及在获取不同数据内容的时候,我们应该如何去获取以及思考脚本思路。在实际应用过程,同学们可以根据自己的需求,去编写更加复杂和专业的脚本。 如果在测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在官方交流群(526033840)里告诉我们或者提交issue,也欢迎大家投稿其他不同的使用小技巧。 (猜你还想看 ) ▼ Airtest-Selenium实操小课④:微信读书上阅读书籍 Airtest脚本的重构与优化:提升测试效率和可读性 多设备兼容脚本,轻松拿捏 本文分享自微信公众号 - AirtestProject(AirtestProject)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。