python使用playwright学习笔记-元素定位

元素定位是UI自动化核心内容,与传统的selenium相比,最大的区别在于selenium是协议的单向的,只负责做而不等待响应,因此需要结合强制等待,隐式等待和显示等待来判定,playwright则有自动等待机制,即做的时候还要等待响应,例如点击操作时,会判定元素是否可点击交互

selenium 

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
element = driver.find_element(By.ID, 'su')
element.click()  # 正常执行
driver.refresh()  # 刷新页面后执行
time.sleep(3)
element.click()  # 执行报错

通过find_element()方法获取的元素进行第一次点击时,正常执行,刷新页面后再次点击报错,因为dom元素重新加载,element是之前的dom元素对象。

playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto('https://www.baidu.com/')
    element = page.locator('#su')  
    element.click()  # 正常执行
    page.reload()
    element.click()  # 正常执行

locator()方法返回的是一个定位器对象,跟selenium不同之处在于,这是动态的,在click()动作执行时才会真正的查找该对象,属于懒查询(需要真正使用时才查询元素)

元素定位

locator()就是playwright核心的定位方法,参数有以下5个:

        selector :接受xpath或css_selector定位元素的字符串参数

        has: 接受一个locator对象,表示匹配selector中包含有该locator的元素

        has_not:接受一个locator对象,表示匹配selector中不包含有该locator的元素

        has_text: 表示匹配指定文本元素,文本在该节点或其后代节点中

        has_not_text: 表示不匹配指定文本元素,文本在该节点或其后代节点中

        has_text和has_not_text还可以接受正则匹配对象

以如下的html为例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="test">
    <h2>测试文本</h2>
</div>
<div class="test">
    <span>测试123</span>
</div>
</body>
</html>

使用has和has_not的方法


    # 后代节点包含h2,高亮对应的测试文本
    page.locator('div', has=page.locator('h2')).highlight()  
    page.wait_for_timeout(2000)
    # 后代节点不包含h2,高亮对象的测试123
    page.locator('div', has_not=page.locator('h2')).highlight()  
    page.wait_for_timeout(2000)

结果如下图:

使用has_text和has_not_text方法

    # 正则匹配包含"测试+至少一个数字"
    page.locator('div', has_text=re.compile(r'测试\d+')).highlight()
    page.wait_for_timeout(2000)
    # 不包含文本测试123,匹配"测试文本"
    page.locator('div', has_not_text='测试123').highlight()
    page.wait_for_timeout(2000)

执行结果如图:

上一篇:python使用playwright学习笔记-安装使用

下一篇:python使用playwright学习笔记-元素操作

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Playwright是一个能够控制浏览器进行自动化测试和操作的工具。其中,-remote-debugging-port是Playwright库提供的一个选项,用于指定远程调试的端口号。 使用-remote-debugging-port选项,可以让Playwright通过特定的端口与浏览器建立调试和通信的连接。这样一来,我们就可以实时地监控浏览器执行的情况,以便进行调试或将其集成到其他自动化工具中。 举个例子,假设我们想要在Playwright使用Chrome进行自动化操作,并在开始之前设置远程调试端口号为9222。我们可以这样编写代码: ```python from playwright.sync_api import sync_playwright def main(): with sync_playwright() as playwright: browser_type = playwright.chromium browser = browser_type.launch(remote_debugging_port=9222) page = browser.new_page() # 在这里可以进行各种自动化操作 # ... browser.close() if __name__ == '__main__': main() ``` 在上述代码中,我们使用playwright.sync_api中的sync_playwright函数来创建一个Playwright对象。然后,我们选择了要使用的浏览器,这里是Chrome。接着,我们通过调用browser_type的launch方法来启动浏览器,并使用remote_debugging_port参数指定了远程调试的端口号9222。 这样,我们就成功地在Playwright中设置了远程调试端口号。接下来,我们可以根据需要在此基础上进行各种自动化测试和操作,并通过与浏览器建立的调试连接实时监控其执行情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值