41新一代自动化测试神器playwright+python系列课程_playwright_日历时间控件处理

41_playwright_日历时间控件处理

系统中往往存在着需要设置时间的情况,基本都是使用时间控件来选择时间,为了保证时间格式的统一,在设置时间时是不允许手动输入的,只通过点击鼠标选择时间就可以了,这种操作在使用时没有问题,但是在写自动化测试脚本时问题就来了,就是如果安装手动操作选择时间的过程来写脚本,就会有很多次的元素定位,写起来会非常麻烦。但是我们分析后会发现,点击了那么多次鼠标,最终的结果就是把一个时间填到了时间的输入框中,那我们就可以想,在写脚本时能不能直接输入时间,避免多次的时间定位,提高脚本编写的速度以及将来执行的速度。但是时间控件的输入框是不允许输入的,我们脚本怎么能直接输入呢。实际上元素能否输入是由readonly属性控制的,如下图的时间选择框

这种情况下,只需要将readonly属性去除掉就可以输入时间了,怎么去除元素的属性呢,在playwright中,使用evaluate()执行js脚本就可以了。

实践代码:

# '''

# author: 测试-老姜   交流微信/QQ:349940839

# 欢迎添加微信或QQ,加入学习群共同学习交流。

# QQ交流群号:877498247

# 西安的朋友欢迎当面交流。

# '''

from playwright.sync_api import Playwright, sync_playwright, expect

playwright = sync_playwright().start()

browser = playwright.chromium.launch(headless=False, args=['--start-maximized'],slow_mo=1000) #默认无头模式,设置浏览器最大化

context = browser.new_context(no_viewport=True) # 创建上下文,相当浏览器于实例化,即打开浏览器

page = context.new_page() # 打开一个新标签页

page.goto("http://127.0.0.1:8080/oa/") # 打开网址

page.locator("input[name=\"loginId\"]").fill("sup")

page.locator("input[name=\"password\"]").fill("s1234567")

page.get_by_role("button", name="登录").click() #点击登录后会弹出提示信息框

page.locator('text="综合查询"').click()

frame = page.frame_locator('#iframe_main').frame_locator('[name="listframe"]')

frame.locator('[name="searchCondition"]').select_option('createTime')

date_input = frame.locator('[name="begDate"]') # 定位到时间输入框

date_input.evaluate('node => node.removeAttribute("readonly")') # 删除readonly属性

date_input.evaluate('node => node.value="2024-01-13"') # 执行js输入时间

# date_input.fill('2024-01-13') #使用fill输入时间

page.wait_for_timeout(10000)

context.close()

browser.close()

playwright.stop()

posted @ 2024-03-21 11:06  测试_老姜  阅读(55)  评论(0)    收藏  举报