WATIR - 如何使用多个标识符定位元素

WATIR - How can I locate an element using more than one identifier

我的测试正在尝试检查是否显示错误消息或成功消息。

两条消息的 CSS 是:

span id="APEX_SUCCESS_MESSAGE" data-template-id="20696621797766286675_S" class="apex-page-success u-hidden"


span id="APEX_ERROR_MESSAGE" data-template-id="20696621797766286675_E" class="apex-page-success u-hidden"

我试过使用 id 来定位它们(​​如果 browser.span(:id=> "APEX_SUCCESS_MESSAGE").exists?)但问题是它同时处理错误和成功消息与仅使用 id 相同。我猜我需要使用 data-template-id="20696621797766286675_S" 找到它们,但我不知道如何在我的代码中实现它而不会出错。

有什么想法吗?CSS for the messages

鉴于每个 span 都有一个唯一的 ID,我希望只找到 1 个元素。我不希望需要第二个标识符。

我猜问题出在元素的使用方式上,特别是 #exists? 的用法。 #exists? 验证元素是否出现在 HTML 中。它不会验证元素是否对用户实际可见。

鉴于标记屏幕截图,看起来这两个元素可能总是包含在 HTML 中,但是通过切换“u-隐藏”class,它们被隐藏或显示给用户。我认为您真正想要的是使用 #present?,它检查元素是否对用户实际可见:

if browser.span(:id=> "APEX_SUCCESS_MESSAGE").present?

要回答您关于使用多个标识符的问题,标识符是 Hash。您可以添加其他项目。请注意,对于 data-* 属性,它们需要将破折号替换为下划线:

browser.span(id: "APEX_SUCCESS_MESSAGE", data_template_id "20696621797766286675_S")