- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,伙计们...我知道这个问题之前似乎已经得到解答,但我尝试了几种解决方案,但没有一个奏效。如果我再看到一次 StaleElementReferenceException
,我就会丢掉它。我妻子的男朋友在 mock 我,请帮忙。
编辑:删除了一些代码,因为我认为它不再与压缩这篇文章相关。
更新:根据下面@vitaliis 的建议,我将代码更改为:
while True:
xpath_atc = '//div[@class="fulfillment-add-to-cart-button"]'
try:
wait = WebDriverWait(self.driver, 60)
wait.until(EC.visibility_of_all_elements_located((By.XPATH, xpath_atc)))
except TimeoutException:
print(f'A timeout occured after 60s. Refreshing page and trying again...')
self.driver.refresh()
continue
element_arr = self.driver.find_elements_by_xpath(xpath_atc)
for i in range(len(element_arr)):
wait.until(EC.visibility_of(element_arr[i]))
if element_arr[i].text == 'Add to Cart':
element_arr[i].click()
return
time.sleep(30)
self.driver.refresh()
现在,这段代码似乎是我迄今为止尝试过的最有效的代码,因为它产生的lessStaleElementReferenceException
但它仍然产生 em> 生产它们...
我真的很困惑,它不一致,有时会出现异常,有时不会。关于此问题的任何其他想法将不胜感激。
解决方案:tldr;这行得通
element = self.driver.find_element_by_xpath(xpath)
while(EC.staleness_of(disc_ele).__call__(False)):
element = self.driver.find_element_by_xpath(xpath)
text = element.text
如果有人对为什么这行得通感兴趣,我会给出我最好的猜测。 staleness_of
类定义如下:
class staleness_of(object):
""" Wait until an element is no longer attached to the DOM.
element is the element to wait for.
returns False if the element is still attached to the DOM, true otherwise.
"""
def __init__(self, element):
self.element = element
def __call__(self, ignored):
try:
# Calling any method forces a staleness check
self.element.is_enabled()
return False
except StaleElementReferenceException:
return True
当与 WebDriverWait
类一起使用时,即 WebDriverWait(driver, timeout).until(EC.staleness_of(element))
我们正在等待元素be stale 这就是我们要找的东西吗?那么,由于陈旧异常的不一致性,元素可能不是陈旧的,如果不是陈旧的,那么我们将得到一个超时异常,这不是我们想要的结果。
幸运的是,staleness_of
类有一个方法 __call__()
如果元素陈旧则返回 true,否则返回 false。因此,使用 while
循环,我们可以通过每次迭代更新元素并使用更新元素上的 __call__()
方法检查是否过时来持续检查元素是否过时。最终,更新后的元素不会过时,__call__()
方法将返回 false 退出循环。
编辑 好吧,没用。我想有一种情况,元素在 while 循环条件下不是陈旧的,但在调用 .text
时变得陈旧。
最佳答案
您的定位器是否独一无二?尝试等到您的元素可点击:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
wait = WebDriverWait(driver, 20)
wait.until(EC.element_to_be_clickable(
(By.XPATH, '//div[@class="fulfillment-add-to-cart-button"]')))
button = driver.find_element_by_xpath('//div[@class="fulfillment-add-to-cart-button"]')
button.click()
如果有许多元素具有相同的定位器,请尝试使用 visibility_of_all_elements_located
而不是 element_to_be_clickable
我可以建议以下算法:
find_elements_by_xpath
查找具有相同定位符的所有元素关于python - StaleElementReferenceException Selenium Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66926485/
我刚刚开始使用带有 webdriver 的 geb 进行自动化测试。 As I understand it ,当我在页面上定义内容时,每次调用内容定义时都应该查找页面元素。 //In the cont
我有一个非常简单的脚本,可以找到页面中的所有 HREF 并迭代并记录它: Photo search scroll Go To https://xxx ${elements}=
我正在为鼠标悬停工作,我想通过使用 for 循环单击每个链接来测试所有链接的工作状况。在我的程序中,迭代进行一次,而对于下一次迭代,它不起作用并显示“StaleElementReferenceExce
在我的网页上,我有一个部分链接列表,每个部分都有详细信息的链接。我尝试转到每个部分,然后验证所有链接都没有损坏。 List sections = driver.findElements(By.xpat
我有一个场景,我试图循环遍历条形图上的多个元素,直到找到“rect”标签名称。当我单击“矩形”标签名称时,将从图表中选择单个栏,并且我将重定向到另一个页面。请参阅下面我正在使用的条形图的图像: /im
我已经研究这个错误一段时间了,并尝试了很多方法,但似乎没有任何效果...... while(!driver.findElements(By.className("next")).isE
您好,我是 Selenium 的新手 我正在使用 Java 库,已经尝试了 Chrome 和 Firefox 驱动程序。 我正在运行一个循环。有趣的是,循环有时工作 3、2 次,它并不总是在同一次迭代
我正在测试新建的框架,在 Chrome 浏览器中工作时经常遇到 org.openqa.selenium.StaleElementReferenceException。框架设计会不会有问题?当我在其他浏
显示堆栈溢出错误 public static void main(String[] args) throws Exception { System.setProperty("webdriver
我在这样的测试中有wait: WebDriverWait wait = new WebDriverWait(dr, TimeSpan.FromSeconds(30)); ... wait.Until(
好吧,伙计们...我知道这个问题之前似乎已经得到解答,但我尝试了几种解决方案,但没有一个奏效。如果我再看到一次 StaleElementReferenceException,我就会丢掉它。我妻子的男朋
导航到不同页面并返回后,我收到 StaleElementReferenceException。我尝试过显式等待,再次重写定位器,但似乎不起作用。任何帮助将不胜感激。 Select select
我尝试用selenium 制作一个网络爬虫。我的程序引发 StaleElementReferenceException。我认为这是因为我递归地抓取页面,并且当页面没有更多链接时,该函数导航到下一页,而
我需要获取快速变化元素的值(在本例中是一个以毫秒为单位倒计时的计时器),但是当我尝试使用时 String timeLeftString = driver.findElement(By.xpath(ti
我有一个包含一堆表格的页面。我在外循环中遍历表,然后在内循环中遍历表中的每一行。一切正常。但是有些页面有下一步按钮。当我在完成页面后添加代码以单击它时,我开始在循环遍历表格的行时收到 StaleEle
在我的 Selenium 测试代码中有几行 点击一个复选框 从选择框中选择一个项目 点击按钮提交表单 这是代码 WebElement selectAllElement = driver.findEle
我在 Ubunto 上运行 Web E2E 测试(使用 cucumber、junit、selenium webDriver)。 使用remoteWebDriver时,我的测试偶尔失败(使用local-
我一直在使用 protractor/jasmine2 解决陈旧元素引用异常的问题。 我的规范: var LoginPage = require('../pages/login_page.js'); v
这个问题已经有答案了: Stale element exception python (2 个回答) Selenium clicks one time, but next click returns
运行测试时出现此错误:org.openqa.selenium.StaleElementReferenceException: 元素不再附加到 DOM 关于如何解决上述异常的任何想法?这发生在我的网格中
我是一名优秀的程序员,十分优秀!