找到目标元素后,想找一个和这个元素并列层级的另一个元素,代码怎么写?
availableTickets[0] 和 waitTickets[0] 哪个不为空值就赋值给visibleTicket,怎么写?
回答
// 文档地址 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; // 两个数组的第一个元素都为空时的默认值
}