【问题标题】:How to select element, if all classes are the same, if only text is different?如果所有类都相同,如果只有文本不同,如何选择元素?
【发布时间】:2021-03-25 12:54:29
【问题描述】:

我想自动化https://demoqa.com/网页,首先,我想选择Widgets卡片并点击这张卡片,如果每张卡片的类相同,我该如何选择它,只有文字不一样。 所以我想用这个get getWidgetButton() { return $('//h5[normalize-space(text()) = "Widgets"]'); 但是当我运行这个When('user press on Widgets button', ()=>{NavigationPage.getWidgetButton.click(); }); 我收到错误

  1. 小部件数据选择器当用户按下小部件按钮时 [chrome 87.0.4280.88 windows #0-0] 元素点击被拦截:元素 ... 在点 (709, 669) 处不可点击。其他元素会收到点击:...

如何选择我想要的元素?谢谢!

【问题讨论】:

    标签: javascript xpath automation cucumber webdriver-io


    【解决方案1】:

    有多种方法,一种方法是获取HTML elementinnerText 或获取nth-childquerySelector

    【讨论】:

      【解决方案2】:

      我猜你的浏览器窗口太小了,所以当你试图点击“小部件”按钮时,它会被页脚覆盖。您需要最大化浏览器窗口或使用选项以最大化大小启动浏览器。

      【讨论】:

      • 我这样做了,但它没有帮助,页脚仍然覆盖小部件按钮,我如何向下滚动直到小部件?
      • @GintarsLazda 尝试实现scrollIntoView
      【解决方案3】:

      首先尝试等待:使用element.waitForClickable() 不需要滚动,WebdriverIO可以点击元素,如果它显示在屏幕上而不执行滚动。

      选择器在 WebdriverIO 中确实得到了简化。您可以在大多数情况下使用 css 选择器,这就足够了。有两种选择元素的方法:

      1. 如果要选择多个具有相同 className 的元素,请在 WebdriverIO 中使用 使用$$,它会返回一个元素数组。然后您可以通过索引号访问元素。要选择所有小部件的标题,您可以使用以下代码:get widgetHeaders () { return $$('.card h5') } 您的小部件卡片是第 4 个元素,这意味着它的索引是 3。因此,您可以像这样访问它,然后单击 widgetHeaders[3].click();。更多详情:findElements in WebdriverIO

      2. 这是您可以使用内部文本查找单个元素的方法:get getWidgetButton() { return $("h5='Widgets']"); 或查找包含“小部件”的第一个 h5get getWidgetButton() { return $("h5*='Widgets']"); 更多详情:findElement by inner text or by partial text

      注意:作为 QA,您的首要任务应该是发现缺陷。在您共享的网站中,页脚位置存在问题。页脚越过身体并覆盖底部身体的 60 像素。 QA 必须报告此问题,并且必须由开发人员修复。我想修复它的最简单方法是这样的:.body-height { min-height: 100%; padding-bottom: 70px; }

      【讨论】:

        猜你喜欢
        • 2012-02-28
        • 1970-01-01
        • 2022-01-22
        • 2019-01-17
        • 1970-01-01
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多