playWright学习总结

注意,这里并没有学过selenium自动化。playwright对比selenium来说,不需要不断下载驱动。
且playWright最大的优点是可以录制操作,并自动生成自动化脚本。

视频:快速上手-3-示例_哔哩哔哩_bilibili
资料:Xpath/Role/视觉 定位方法 - 白月黑羽

安装:

直接使用命令安装:pip install playwright
安装需要的浏览器:playwright install
安装对应的浏览器:playwright install chromium

之前写的差不多了,然后没保存笔记,导致重新打开都不见了。就简约过了。

下面两章的定位方法,其实通过辅助codegen 助手的方式都可以快速实习,而且定位方法涉及的语法较多,不是一时半会学的完的,这里就快速过一遍了。
codegen助手:playwright codegen+网址。

CSS选择器 定位方法

这是第一种定位,通过CSS选择器的方式。
其中,使用的操作方式有:click()、fill()、inner_text()。

Locator 对象:

page.locator('#kw').fill('通讯')
page.locator('#go').click() 

根据 tag名、id、class 选择元素:

locators = page.locator('div').all()
for info in locators:
   print(locators.inner_text())

开发者工具栏:
通过ctrl+f可以快速搜素定位目标元素。并知道目标元素有多少个。

Xpath/Role/视觉 定位方法

Xpath是一种语法,用于html文档选择节点。常用于playwright中。比起CSS语法更简洁。格式:/元素/子元素 。而css一般格式:元素>子元素。

根据本文内容定位:get_by_text(‘文本内容’).   //可以获取对应文本的所有文本内容

根据 元素 role 定位:get_by_role('对应元素属性值')

role元素是一种角色定位,一般是用于像alert这种信息,它是一种属性。

使用 codegen 助手:playwright codegen +网址

HTML元素有隐含的 ARIA role 和 ARIA Attribute,以及对应的 Accessible Name,规则比较复杂,不太容易掌握。可以使用 Playwright 的代码助手 codegen ,代码助手产生代码时, 能使用 role定位的,会优先使用 role 定位。

其它用户视觉定位:
根据 元素 placeholder 定位:get_by_placeholder

根据 元素关联的 label 定位:get_by_label()

根据 元素的 alt text 定位:get_by_alt_text()

根据 元素 title 定位:get_by_title("byhy首页")

缺省等待时间
其实就是playwright找不到此元素所消耗的时间,且返回错误信息。不过,默认等待时间之内不会返回错误信息。

界面操作

元素通用操作:

获取文本内容方法:
1.inner_text()  获得单个文本信息,通过for in 操作可以获取多个。
2.all_inner_texts()  获取多个文本信息,返回列表。

上述是获取可见文本,还存在不可见文本:通过text_content()或者all_text_contents()获取

获取元素属性:get_attribute(),获取元素熟悉值

获取元素内部html:inner_html()

点击方法:click(),双击方法是dblclick()

悬停光标:hover()

等待元素可见:使用 Locator对象的 wait_for 方法

输入框操作:

文本框输入:单行文本框 input 或者 多行文本框 textarea 都可以使用 Locator对象的 fill 方法进行输入。

文本框清空:locator.clear()

获取文本框里的文字:input_value。注意不是inner_text。

获取文件输入框的文件:set_input_files()方法。

# 先定位
lc = page.locator('input[type=file]')

# 单选一个文件
lc.set_input_files('d:/1.png')

radio单选/checkbox多选

如果要点选 radio框, 可以使用 Locator对象的 check 方法
如果要取消选择 radio框, 可以使用 Locator对象的 uncheck 方法
如果我们要判断 radio框 是否选中,可以使用 Locator对象的 is_checked 方法

select元素操作:

select框 则是一个新的select标签,要选择选项,可以使用 select 元素对应的 Locator对象的 select_option 方法。

select单选框:直接用Select方法选择即可。
例如,page.locator('#ss_single').select_option('小江老师') 

select多选框:对于select多选框,要选中某几个选项,同样可以使用上面的方法,参数为包含多个值的列表即可,page.locator('#ss_multi').select_option(['小江老师', '小雷老师'])

获取select选中选项:同样可以通过css selector 表达式 :checked 伪选择 获取所有选中的 select选项。

page.locator('#ss_multi').select_option(['小江老师','小雷老师'])
lcs = page.locator('#ss_multi option:checked').all_inner_texts()
print(lcs)

网页操作:

打开网址/刷新/前进/后退:要 打开网址/刷新/前进/后退 , 可以分别调用 Page 对象的 goto/reload/go_back/go_forward 方法

获取网页Html:page.content()

设置页面大小:page.set_viewport_size({"width": 640, "height": 480})

frame/tab 切换,一些技巧

frame切换:

特别注意,有些html文档中,lcs = page.locator('.plant').all() 无法输出文本内容。比如,iframe 元素, 在html语法中, frame 元素 或者 iframe 元素的内部 会包含一个 被嵌入的 另一份html文档。

所以这个时候,需要用到切换,其实就是定位到这个内部来。

方法: Page 或者 Locator 对象的frame_locator() 可以定位到frame内部。
例如:

# 产生一个  FrameLocator 对象
frame = page.frame_locator("iframe[src='sample1.html']")

# 再 在其内部进行定位
lcs = frame.locator('.plant').all()
for lc in lcs:
    print(lc.inner_text(timeout=1000))

窗口切换:

即是,点击链接跳转到一个新接口。这个时候即使 使用了page.locator('').click()跳转到另一个页面,这个时候获取的page页面仍然是原网页。

如果要到新窗口使用,需要用到BrowserContext对象。
# 创建 BrowserContext 对象   context = browser.new_context()

context = browser.new_context()
page = context.new_page()
page.goto("https://www.byhy.net/cdn2/files/selenium/sample3.html")

page.locator('a').click()
# //必须要等待几秒,否则跳转太快,而newPage还未获取网页元素
page.wait_for_timeout(2000)
newPage = context.pages[1]
print(page.title())
print(newPage.title())

上述特别注意,创建的context对象。与原先page = browser.new_page()的区别!!!现在page的获取方式是通过context获取。page = context.new_page()。

设置当前tab:如果当前界面有很多窗口,要把某个窗口作为当前活动窗口显示出来,可以调用该窗口对应的Page对象的 bring_to_front 方法。

关闭网页窗口:前面我们学过Browser对象有close 方法,那是关闭整个浏览器。如果只是要关闭某个网页窗口,可以调用该窗口对应的Page对象的 close 方法。

冻结界面:

案例:当我们的鼠标 从 音乐 移开, 这个 栏目就整个消失了, 就没法 查看 其对应的 HTML。
其实就是一些鼠标悬浮会展示信息,但是当移开就不展示,这个时候不好获取对应的dom节点。

在 开发者工具栏 console 里面执行如下js代码

setTimeout(function(){debugger}, 5000)

截屏:

整个网页截屏,使用 Page 对象的 screenshot (path='***.img')方法。
部分网页内容截屏,使用locator对象的screenshot方法。

拖拽:

使用page对象的drag_and_drop方法。暂时跳过。

弹出对话框:

有出现对话框的情况,会因为对话框卡在那里导致后续操作超时而无法完成。 那么需要模拟用户点击ok按钮处理对话框。

alert弹出框:可以使用codegen处理。其中accept方法等同点击确定按钮。dismiss等同取消按钮。message属性就是对话框提示信息字符串。

page.once("dialog", lambda dialog: dialog.dismiss())
def handinfo(dialog):
    print(dialog.message)
page.on('dialog',handinfo)

page.get_by_role("button", name="alert").click()

Confirm弹出框:只有确认或取消操作。同上。

Prompt弹出框:需要用户输入信息上去。通过dialog对象的accept方法可以输入参数字符串,作为要输入的信息。

你可能感兴趣的:(python,开发语言)