Codeception WebDriver验收测试无法点击它能看到的元素

Codeception WebDriver acceptance test can't click on an element it can see

我看过这个问题的其他答案,但 none 适用。我的是这个问题的一个非常奇怪的版本。

测试代码在一个循环中,在四个选项卡(不是浏览器选项卡)上执行相同的操作。过程是:

单击四个选项卡之一。 单击按钮以填充网格。 对网格执行 5 次操作。 (对每个选项卡重复)

所有五个操作在第一次循环时工作正常。第二次循环,第三次操作失败:

$I->clickWithRightButton("//div[text() = '" . oPageVariables::$namePrefix . 
    $name . "']");
$I->waitForElement("//span[text() = 'Change Category']");
$I->see('Change Category');
$I->wait(1);
$I->click("//span[text() = 'Change Category']");

这是相关的 HTML:

<span class="x-menu-item-text" id="ext-gen315">Change Category</span>

我不能使用 ID,因为它可以更改。请注意,我要单击的元素在每个选项卡上都是相同的。

右键单击可以下拉菜单,但单击操作失败 "element is not visible," 即使“$I->waitForElement”和 I->See 工作正常。

看着屏幕,"Change Category" 元素肯定是可见的。

这是奇怪的部分。无论我如何更改选项卡的测试顺序,它总是在测试的第二个选项卡上失败(第二次通过循环)。这意味着选择器和代码都是正确的。我试过将 class 添加到选择器,但结果是一样的。

感谢任何线索。

根据 Naktibalda 的建议,我认为我已经通过使每个 drop-down 选项中的文本对于每个选项卡都是唯一的来解决原始问题。

不幸的是,CodeCeption 无法再单击选项卡标题来更改第二遍的选项卡。这在一开始就有效(我可以在 运行 第一次通过之前单击任何选项卡标题)。在随后的传递中,non-active 选项卡的标题(唯一的)不被认为是可见的,尽管我可以很好地看到它们。

唯一最终起作用的是在循环结束时添加:

$I->reloadPage();

我认为这是一个错误,但我不确定它是否是 CodeCeption、WebDriver 或 ExtJS 3 中的错误。