|
|
@@ -553,8 +553,18 @@ export class RegionManagementPage {
|
|
|
* @returns 区域是否存在
|
|
|
*/
|
|
|
async regionExists(regionName: string): Promise<boolean> {
|
|
|
- const regionElement = this.treeContainer.getByText(regionName);
|
|
|
- return (await regionElement.count()) > 0;
|
|
|
+ console.debug(`regionExists: 查找 "${regionName}"`);
|
|
|
+ try {
|
|
|
+ // 等待元素出现,最多等待 5 秒
|
|
|
+ const regionElement = this.treeContainer.getByText(regionName, { exact: true });
|
|
|
+ await regionElement.waitFor({ state: 'attached', timeout: 5000 });
|
|
|
+ console.debug(`regionExists: 找到 "${regionName}"`);
|
|
|
+ return true;
|
|
|
+ } catch (error) {
|
|
|
+ console.debug(`regionExists: 未找到 "${regionName}", error:`, error);
|
|
|
+ // 元素未出现
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -562,8 +572,20 @@ export class RegionManagementPage {
|
|
|
* @param regionName 区域名称
|
|
|
*/
|
|
|
async expandNode(regionName: string) {
|
|
|
- // 找到区域文本元素
|
|
|
- const regionText = this.treeContainer.getByText(regionName, { exact: true });
|
|
|
+ console.debug(`expandNode: 尝试展开 "${regionName}"`);
|
|
|
+
|
|
|
+ // 找到区域文本元素 - 使用更精确的定位策略
|
|
|
+ // 使用 filter 确保只匹配完全独立的文本节点,而不是包含按钮的元素
|
|
|
+ const allRegionTexts = this.treeContainer.getByText(regionName, { exact: true });
|
|
|
+ const count = await allRegionTexts.count();
|
|
|
+ console.debug(`expandNode: 找到 ${count} 个匹配 "${regionName}" 的元素`);
|
|
|
+
|
|
|
+ if (count === 0) {
|
|
|
+ throw new Error(`区域 "${regionName}" 未找到`);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 使用第一个匹配项
|
|
|
+ const regionText = allRegionTexts.first();
|
|
|
await regionText.waitFor({ state: 'visible', timeout: 5000 });
|
|
|
|
|
|
// 滚动到元素位置
|
|
|
@@ -574,10 +596,10 @@ export class RegionManagementPage {
|
|
|
const regionRow = regionText.locator('xpath=ancestor::div[contains(@class, "group")][1]');
|
|
|
const expandButton = regionRow.locator('button').filter({ has: regionRow.locator('svg') }).first();
|
|
|
|
|
|
- const count = await expandButton.count();
|
|
|
- console.debug('展开按钮数量:', count, 'for', regionName);
|
|
|
+ const buttonCount = await expandButton.count();
|
|
|
+ console.debug(`expandNode: 展开按钮数量: ${buttonCount}`);
|
|
|
|
|
|
- if (count > 0) {
|
|
|
+ if (buttonCount > 0) {
|
|
|
// 悬停以确保按钮可见
|
|
|
await regionRow.hover();
|
|
|
await this.page.waitForTimeout(200);
|
|
|
@@ -586,20 +608,11 @@ export class RegionManagementPage {
|
|
|
await expandButton.click({ timeout: 5000 });
|
|
|
|
|
|
// 等待懒加载的子节点出现
|
|
|
- // 首先等待一下让展开动画完成
|
|
|
await this.page.waitForTimeout(500);
|
|
|
|
|
|
- // 等待市级子节点出现(如果有子节点的话)
|
|
|
- // 查找市级子节点(以"市"结尾)
|
|
|
- const cityNode = this.treeContainer.getByText(/市$/);
|
|
|
- try {
|
|
|
- await cityNode.waitFor({ state: 'visible', timeout: 3000 });
|
|
|
- console.debug('找到市级子节点');
|
|
|
- } catch {
|
|
|
- console.debug('没有找到市级子节点,可能没有子节点或加载失败');
|
|
|
- }
|
|
|
+ console.debug(`expandNode: 成功展开 "${regionName}"`);
|
|
|
} else {
|
|
|
- console.debug('没有找到展开按钮,可能已经是展开状态或没有子节点');
|
|
|
+ console.debug(`expandNode: 没有找到展开按钮,可能已经是展开状态或没有子节点`);
|
|
|
}
|
|
|
}
|
|
|
|