gpt4 book ai didi

html - Codeception 无法点击它之前看到的元素

转载 作者:行者123 更新时间:2023-12-05 07:39:26 26 4
gpt4 key购买 nike

亲爱的 Stackoverflow 用户,您好

目前我正在使用 Selenium 作为 WebDriver 模块使用 Codeception 编写验收测试。在我检查我们的子导航是否存在、是否完整并且有效的测试中,我遇到了以下代码:

$I->see('Partners');
$I->click('Partners');

所有 see 调用都运行良好,但 click 调用失败并出现 ElementNotVisibleException 说明要单击的元素不可见,我不明白,因为 see 调用有效。

为确保我们在页面上看不到任何旧的“合作伙伴”字符串,但它确实是我想要单击的链接,我通过添加 a 选择器更改了调用。

$I->see('Partners', 'a');
$I->click('Partners');

不过,我还是收到了之前的 ElementNotVisibleException。在下一步中,我向对此的 click 调用添加了一个上下文:

$I->click('Partners', 'a');

这使得异常消失了。尽管如此,点击从未发生,测试只是失败并显示消息:

未找到带有“合作伙伴”的链接或按钮或 CSS 或 XPath 元素。

我什至在点击调用中使用了 XPath,如下所示://a[text()='Partners'] 并得到相同的消息。

最让我困扰的是 see 调用似乎看到了我试图点击的链接,而且,即使是失败后 Codeception 提供的页面源代码和屏幕截图也包含这一点链接,可见且在有效的 HTML 中。

我尝试点击子导航中的其他一些元素,结果相同,而更奇怪的是,点击主导航中的链接似乎工作正常。

我不知道为什么这不起作用,但非常感谢任何帮助。

最佳答案

我不明白为什么它在某些情况下会发生而在其他情况下不会发生,但我找到了一个适合我的解决方案:仅使用 CSS 选择器。

基本上在某些情况下(我认为这与单击 div/span 而不是 a/button 有关)->see() 将使用模糊文本字符串作为第一个参数,但是->click() 需要显式 CSS 选择器。

所以这会有“我能看到但不能点击”的问题:

// BROKEN
$I->see("All topics", ".header-taxonomy .taxonomy-list-title");
$I->click("All topics", ".header-taxonomy .taxonomy-list-title");

但这会起作用:

// WORKS
$I->see("All topics", ".header-taxonomy .taxonomy-list-title");
$I->click(".header-taxonomy .taxonomy-list-title");

显然它一点也不理想,部分原因是它需要一个独特的选择器,但对我来说主要是因为它使测试和测试输出不太一致且更难阅读。

无论哪种方式,我只是想完成这个测试脚本,现在它正在运行,并且因为我仍在使用带有模糊文本定位器的 ->see(),所以我仍然确信在我点击之前显示了文本。

值得注意的是,当使用 PHPBrowser 模块时,这个问题不会发生,这让我很困惑。我“升级”到 WebDriver 并发现由于 ->click() 的不同行为(除了预期需要打开使用它们之前的菜单,这在 PHPBrowser 中不需要)

关于html - Codeception 无法点击它之前看到的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com