Selenium with Python -测试失败的一行代码在之前的170次测试中都是有效的

pbwdgjma  于 2023-06-28  发布在  Python
关注(0)|答案(2)|浏览(110)

在自动化测试套件时,我有一个非常奇怪的行为,当我访问一个网站,点击一个搜索栏,然后寻找某些信息。
我所有的200多个测试都以同样的方式开始,使用完全相同的代码,前177个测试完美通过,但从测试178开始,它在代码行中失败,我找到搜索栏,然后点击它。
对我来说,这毫无意义,但再次,我是相当新的自动化和IT一般,所以我希望你们的人可以给予我一个帮助在这里。
失败的行如下:

WebDriverWait(self.driver, 40).until(EC.presence_of_element_located((coupons_search_bar))).click()

同样,这适用于177个测试,然后在下面的测试中失败。
谢谢!
我在很多方面改变了我进入优惠券搜索栏的方式,但它们对177个第一次测试有效,但对下面的测试失败。
我清理了本地存储和缓存,没有任何变化。

zfciruhq

zfciruhq1#

理想情况下,要找到并点击clickable元素而不是presence_of_element_located(),你需要为element_to_be_clickable()引入WebDriverWait,你可以使用下面的locator strategies

  • 代码行:
WebDriverWait(self.driver, 40).until(EC.element_to_be_clickable((coupons_search_bar))).click()

*注意:需要添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

参考资料

您可以在以下网站中找到关于NoSuchElementException的几个相关讨论:

f4t66c6m

f4t66c6m2#

如果没有额外的调试细节,脚本在X次之后开始失败的原因有很多。以下是一些常见的:

  • 同一网站上的请求太多,会弹出一个窗口。在这种情况下,您将看到ElementClickInterceptedExceptionother element would receive the click),直到您首先关闭弹出窗口。
  • 同一网站上的请求过多会触发反僵尸程序措施。(因为有些网站不想被自动化。)也许对你的请求做一些速率限制。
  • 其他元素出现了,改变了时间。将EC.presence_of_element_located交换为element_to_be_clickable
  • 该网站正在进行A/B测试,这意味着该网站的另一个版本出现了。在这种情况下,添加if语句,根据可见内容更改脚本。

如果上述想法都没有帮助,请使用更多相关信息编辑您的问题,例如添加异常消息,使用的选择器以及可能有助于调试的任何其他细节。

相关问题