如何使用没有 id 的 Playwright 单击按钮

问题描述 投票:0回答:1

我正在使用 Playwright 登录网站并提取一些数据。登录后,我必须单击一个按钮来指定我的用户类型。其中有两个按钮,检查网页后,两个按钮看起来几乎相同。

对于第一个按钮,我不想单击:

<div ng-repeat="model in vm.AvailableUserModes" ng-scope>
   <div class="panel panel-default ng-isolate-scope tnt-busy-min-height tnt-busy-truncate" 
   tnt-  busy-bool="vm.SettingUserMode" position: relative;>
      ...
      <div class='panel-body'>
         ...
         <button type="button" class="btn btn btn-lg btn-block btn-default" 
         ng-click="vm.SetUserModeForCurrentUser(model)" style="padding-top:5px;"> == $0
            "Continue as " 
            <span ngl-bind="model.Name|splitCamelCase" class="ng-binding"> User1</span>
         </button>
      </div>
   </div>
</div>

对于第二个按钮,我确实想单击:

<div ng-repeat="model in vm.AvailableUserModes" ng-scope>
   <div class="panel panel-default ng-isolate-scope tnt-busy-min-height tnt-busy-truncate" 
   tnt-  busy-bool="vm.SettingUserMode" position: relative;>
      ...
      <div class='panel-body'>
         ...
         <button type="button" class="btn btn btn-lg btn-block btn-default" 
         ng-click="vm.SetUserModeForCurrentUser(model)" style="padding-top:5px;"> 
            "Continue as " 
            <span ngl-bind="model.Name|splitCamelCase" class="ng-binding"> User2</span>
         </button>
      </div>
   </div>
</div>

对于登录,按钮的类型为“提交”,因此我可以使用 page.click(button[type=submit])。使用 page.click(button[type=button]) 不起作用(它找不到元素并继续搜索),但我不知道还能用什么来定位这些按钮,或者如何仅选择第二个(我看到的唯一区别是我不想点击的按钮上的 ==$0)。

这是我的代码(删除了 URL、用户名和密码):

from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

with sync_playwright() as p:
    # Open Browser
    browser = p.chromium.launch(headless=False, slow_mo=500)
    page = browser.new_page()
    page.goto('URL', timeout=0)
    
    # Log In
    page.fill('input#Username', 'username')
    page.click('button[type=submit]')
    page.fill('input#password', 'password')
    page.click('button[type=submit]')

    # Continue as User2
    page.is_visible('div.panel-heading')    # wait for User2 button to appear

    # first attempt to click User2 button does not find element and terminate
    page.click('button[type=button]')     
    # when exiting manually, message below shows in terminal
       #   - retrying click action, attempt #17
       #   - waiting 500ms
       #   - waiting for element to be visible, enabled and stable
       #   - element is not visible

    # unable to locate with text using await because SyntaxError: 'await' outside function
    # await page.locator('button:text("Continue as User2")').click();
html button playwright playwright-python playwright-test
1个回答
0
投票

您能否创建一个 MRE(最小可重复示例)或向我们提供您的结果快照,以便我们更好地理解您的问题?这是一个指南。 https://stackoverflow.com/help/minimal-reproducible-example

© www.soinside.com 2019 - 2024. All rights reserved.