【发布时间】:2021-09-29 08:42:59
【问题描述】:
我有一个随机发生的问题,我不知道如何解决。
我有一个网页,我想始终检查它是否一切正常,例如按钮、视频等。
所以我开始使用 selenium,当我在本地运行它时一切正常。
S 我决定通过创建一个 Jenkins 流水线来自动化这些测试,但奇怪的是,在 16 个流水线中,我总是随机出现 2 个流水线,它们总是在同一点失败并超时。
让我提供更多细节:
所有管道的共同点是:
Play video
(wait for the video to finish)
Press Next button
这段代码如下:
# Play Button
time.sleep(5)
wait.until(EC.presence_of_element_located((By.XPATH, "//div[contains(text(),'Play')]"))).click()
time.sleep(120)
# After Video Ends, click Next button
wait.until(EC.presence_of_element_located((By.XPATH, "//button[contains(text(),'Next')]"))).click(
我不是 Selenium 专家,所以这是我能想到的解决方案。
视频播放得很好,总是..但随机失败,因为它找不到Next 按钮。
调试步骤是截取屏幕截图,看看发生了什么。在屏幕截图中,我可以看到按钮,这意味着页面已完全加载。所以我决定将网络驱动程序等待时间增加到150sec,但同样的错误随机发生。
所以我想知道我还能做些什么来防止这些False Positive 的发生?
我希望我的观点足够清楚,如果我遗漏了什么或需要更多信息,请尽管问我。
更新: 谢谢托尼的帮助。 只是为了确保我理解逻辑。这是更新后的代码。
driver.set_window_size(1920,994)
short_timeout = 100
long_timeout = 150
play = None
try:
next = WebDriverWait(driver, short_timeout).until(EC.element_to_be_clickable((By.XPATH, "//div[contains(text(),'Play')]")))
except TimeoutException:
try:
driver.get(driver.current_url)
next = WebDriverWait(driver, long_timeout).until(EC.element_to_be_clickable((By.XPATH, "//div[contains(text(),'Play')]")))
except TimeoutException:
pass
if next is not None:
driver.execute_script("arguments[0].scrollIntoView();", play)
driver.execute_script("arguments[0].click();", play)
# After Video Ends, click Next button
next = None
try:
next = WebDriverWait(driver, short_timeout).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Next')]")))
except TimeoutException:
try:
driver.get(driver.current_url) # reload the current page
next = WebDriverWait(driver, long_timeout).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Next')]")))
except TimeoutException:
pass
if next is not None:
driver.execute_script("arguments[0].scrollIntoView();", next)
driver.execute_script("arguments[0].click();", next)
Try 和 except 必须应用于我想在该页面上执行的每个操作,如果超时,它会重新加载页面并重试。
只有一件事我不确定我是否理解。滚动和单击的 if 语句。我必须为每次尝试声明它?
【问题讨论】:
标签: python-3.x selenium selenium-webdriver