调用 find_elements...().text 算作 find_elements 函数本身吗?
Does calling in find_elements...().text count as the find_elements function itself?
我有代码获取某个 class 的所有元素并从中提取文本元素。
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
print(chatblocks)
chatblocktext = chatblocks[-3]
我目前在第 3 行收到 StaleElementReferenceException。
在第 3 行 运行 中调用 .text 函数是否再次调用 find_elements 函数?为什么这个 Stale 错误没有出现在第 1 行?
为了解决这个问题,将所有文本加载到第 1 行的列表中是否可行?我试过这个:
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView").text
但我收到一条错误消息,指出 .text 不能用于列表对象。
find_element_by_class_name
检索 Web 元素引用。
element.click()
或 element.text
之类的操作正在尝试通过此引用(指针)访问页面上的元素。
他们不会尝试根据它的定位器再次找到该元素,他们会尝试通过它的引用来访问它。
如果元素从收集引用的那一刻起发生更改,则访问没有更多相关引用的元素将引发 StaleElementReferenceException
异常。
此外,find_elements_by_class_name
检索网络元素列表,而不是单个网络元素。
您不能对对象列表应用 .click()
或 .text
方法。
您可以遍历列表并对列表中的每个元素应用命令,如下所示:
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
for el in chatblocks:
print(el.text)
或
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
for el in chatblocks:
print(el.click())
查看
的逐行执行
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
print(chatblocks)
chatblocktext = chatblocks[-3]
find_elements
会 return 一个列表,在本例中是 chatblocks
- 打印整个列表,通常应该打印网络元素,而不是它们的
.text
- 求0后左边第三个元素
现在你的问题:-
在第 3 行 运行 中调用 .text
函数是否再次调用 find_elements
函数?为什么这个 Stale 错误没有出现在第 1 行?
- 不,它不会再 运行。它是 Python 中的列表,因此
find_elements
会 returned 一个网络元素列表。在第 1 行,元素可用。
为此:
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView").text
在列表中你不能用 .text
代替 :
for chat in driver2.find_elements_by_class_name("android.widget.TextView"):
print(chat.text)
我有代码获取某个 class 的所有元素并从中提取文本元素。
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
print(chatblocks)
chatblocktext = chatblocks[-3]
我目前在第 3 行收到 StaleElementReferenceException。
在第 3 行 运行 中调用 .text 函数是否再次调用 find_elements 函数?为什么这个 Stale 错误没有出现在第 1 行?
为了解决这个问题,将所有文本加载到第 1 行的列表中是否可行?我试过这个:
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView").text
但我收到一条错误消息,指出 .text 不能用于列表对象。
find_element_by_class_name
检索 Web 元素引用。
element.click()
或 element.text
之类的操作正在尝试通过此引用(指针)访问页面上的元素。
他们不会尝试根据它的定位器再次找到该元素,他们会尝试通过它的引用来访问它。
如果元素从收集引用的那一刻起发生更改,则访问没有更多相关引用的元素将引发 StaleElementReferenceException
异常。
此外,find_elements_by_class_name
检索网络元素列表,而不是单个网络元素。
您不能对对象列表应用 .click()
或 .text
方法。
您可以遍历列表并对列表中的每个元素应用命令,如下所示:
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
for el in chatblocks:
print(el.text)
或
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
for el in chatblocks:
print(el.click())
查看
的逐行执行chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
print(chatblocks)
chatblocktext = chatblocks[-3]
find_elements
会 return 一个列表,在本例中是 chatblocks- 打印整个列表,通常应该打印网络元素,而不是它们的
.text
- 求0后左边第三个元素
现在你的问题:-
在第 3 行 运行 中调用 .text
函数是否再次调用 find_elements
函数?为什么这个 Stale 错误没有出现在第 1 行?
- 不,它不会再 运行。它是 Python 中的列表,因此
find_elements
会 returned 一个网络元素列表。在第 1 行,元素可用。
为此:
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView").text
在列表中你不能用 .text
代替 :
for chat in driver2.find_elements_by_class_name("android.widget.TextView"):
print(chat.text)