找到目标元素后,想找一个和这个元素并列层级的另一个元素,代码怎么写?

测试脚本 · 16 小时前
第 1 条补充
·
15 小时前

availableTickets[0] 和 waitTickets[0] 哪个不为空值就赋值给visibleTicket,怎么写?

回答

Hamibot AI
1
· 16 小时前

// 文档地址 https://docs.hamibot.com/

在Hamibot中,当你已经找到一个目标元素后,可以通过以下两种主要方法找到它的兄弟元素(并列层级元素):

方法一:通过父元素查找

// 假设已找到目标元素
var targetElement = id("target_id").findOnce();

if (targetElement) {
    // 获取父元素
    var parent = targetElement.parent();
    if (parent) {
        // 在父元素下查找具有特定id的兄弟元素
        var siblingElement = parent.findOne(id("sibling_id"));
        if (siblingElement) {
            log("找到兄弟元素");
            // 对兄弟元素进行操作
            siblingElement.click();
        }
    }
}

方法二:通过索引位置查找

// 假设已找到目标元素
var targetElement = id("target_id").findOnce();

if (targetElement) {
    var parent = targetElement.parent();
    if (parent) {
        // 获取目标元素在父容器中的索引位置
        var index = targetElement.indexInParent();
        
        // 找到后一个兄弟元素(如果存在)
        if (index + 1 < parent.childCount()) {
            var nextSibling = parent.child(index + 1);
            log("找到后一个兄弟元素");
            nextSibling.click();
        }
        
        // 找到前一个兄弟元素(如果存在)
        if (index > 0) {
            var prevSibling = parent.child(index - 1);
            log("找到前一个兄弟元素");
            prevSibling.click();
        }
    }
}

实际应用场景示例

假设你在一个列表中找到了某个商品名称元素,想点击同一行的"加入购物车"按钮:

// 找到商品名称元素
var productName = text("商品A").findOnce();

if (productName) {
    var parent = productName.parent();
    if (parent) {
        // 在同一父容器中查找"加入购物车"按钮
        var addToCartBtn = parent.findOne(text("加入购物车"));
        if (addToCartBtn) {
            addToCartBtn.click();
            log("已点击加入购物车按钮");
        }
    }
}

注意:使用这些方法前,请确保目标元素确实存在且具有父元素。你可以先通过log(targetElement)确认元素是否被正确找到。


补充回答 1

// 文档地址 https://docs.hamibot.com/
var visibleTicket = availableTickets[0] != null ? availableTickets[0] : waitTickets[0];

这段代码使用了三元运算符,它会先检查availableTickets[0]是否不为null或undefined(使用!= null可以同时检查这两种情况),如果是有效的值就使用它,否则使用waitTickets[0]。这种写法简洁且兼容Hamibot使用的Rhino 1.7.15引擎。

如果你需要更明确的判断逻辑,也可以这样写:

// 文档地址 https://docs.hamibot.com/
var visibleTicket;
if (availableTickets && availableTickets.length > 0 && availableTickets[0] != null) {
visibleTicket = availableTickets[0];
} else if (waitTickets && waitTickets.length > 0 && waitTickets[0] != null) {
visibleTicket = waitTickets[0];
} else {
visibleTicket = null; // 两个数组的第一个元素都为空时的默认值
}

ℹ️ 本回答由 AI 生成,内容仅供参考