【问题标题】:How to write xpath to get result for current active window?如何编写 xpath 以获取当前活动窗口的结果?
【发布时间】:2018-02-28 18:45:32
【问题描述】:

我在我的应用程序的不同选项卡上有相同的按钮,例如保存和关闭。如果我像 //button[contains(text(), 'Save')] 这样编写 XPath,它会显示所有按钮的结果,并且显示在不同选项卡上存在“保存”文本的所有按钮,无论是活动的还是非活动的。有没有办法只为当前打开的活动选项卡获取“保存”按钮的结果?

这些是用于不同位置的“保存”按钮的 HTML。我想编写一个适用于所有“保存”按钮的 XPath,以便我可以在方法中使用它。想知道有没有办法获得当前打开的选项卡的结果?

1)

<button class="btn ng-binding btn-primary" style="margin-right:5px;" ng-class="checkDeleteCrud()" ng-click="modalActionManager()" ng-disabled="disableSaveButton()" ng-hide="crudStatus==='V'" type="button" aria-hidden="false">Save
                </button>

2)

<button class="btn ng-binding btn-primary" ng-class="checkDeleteCrud()" ng-click="modalActionManager()" ng-disabled="( notValidType() || locksavebutton || !createStatisticsForm.$dirty ) &amp;&amp; saveButtonText=='Save' " ng-hide="crudStatus==='V'" type="button" aria-hidden="false">
                                                                Save
                                                             </button>

3)

<button class="btn ng-binding btn-primary" style="margin-right:5px;" ng-class="checkDeleteCrud()" ng-click="modalActionManager()" ng-disabled="disableSaveButton()" ng-hide="crudStatus==='V'" type="button" aria-hidden="false">Save
                                        </button>

【问题讨论】:

  • 为活动和非活动标签共享 HTML
  • 您是否在代码中主动切换选项卡?像这样的东西:webdriver.switch_to_window(webdriver.window_handles[1])
  • @Andersson 我已经用 HTML 编辑了我的问题....只是想知道有没有办法获得当前打开的窗口的结果(带有保存按钮)而不是那些保存按钮网页,但目前它在不同的窗口中不可见。
  • 您希望 XPath 获取提供的 3 个按钮中的哪一个?
  • @Andersson 由于这三个保存按钮位于不同的位置并且不能同时可见,所以我想编写通用的通用 XPath,它适用于当前可见的“保存”按钮,而不是编写不同的每个单独的 XPath 一样有很多。那么有什么办法吗?

标签: selenium xpath


【解决方案1】:

如果您正在为可见按钮寻找通用的东西,为什么不简单地使用 CSS 选择器,例如:

button[ng-disabled*=' ']

如果我解释当前你所有禁用的元素的ng-disabled 值等于disableSaveButton(),但活动元素没有此功能但包含带空格的数据,所以我将查看button 中的任何空格@ng-disabled数据简单。

希望这会有所帮助。

【讨论】:

  • 嗨,这个 css(button[ng-disabled*=' ']) 没有给出任何结果。
  • 当我打开上面 HTML(第二个)中提到的具有“保存”按钮的不同窗口时,它显示了两个匹配项。
  • 你能更新更好的 html 视图,因为这是 Angular 应用程序。窗口这个词也很难理解。它是弹出窗口还是新选项卡中的元素。请更新当元素进入活动状态时 dom 元素如何变化。
【解决方案2】:

首先查找活动选项卡,为此您需要了解 Dom 中的活动选项卡与非活动选项卡有何不同。然后在此元素中查找带有文本“保存”的按钮。在 XPath 表达式中使用点作为第一个字符。

假设webelement“标签”是活动标签然后你可以找到如下按钮(C#代码):

tab.FindElement(ByXPath(".//button[contains(text(),'Save')]")

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多