Return 不是 driver.find_elements_by 元素 ID 的东西

Return something that isn't element ID with driver.find_elements_by

我正在寻找某个 class 的某些元素的列表。但是,driver.find_elements_by_locator return 是默认的 WebElements 列表。由于元素 ID 每时每刻都在变化,我想知道我是否可以使用 find_elements_by_locator 和 return 一些更恒定的东西的列表,比如 XPATH。

代码:

listofblocks = driver1.find_elements_by_class_name("android.widget.RelativeLayout")
print(listofblocks)

在技术上没有什么是行不通的,只是在寻找更好的return。

看,

driver.find_elements_by_locator 

其中 locator 可以是 xpathcssid, class..等

它总是return一个列表,而不是元素ID

并且该列表将包含与传递的定位器关联的 WebElements

一旦你有了一个列表,在你的情况下 listofblocks ,你可以迭代它:-

for block in listofblocks:
    print(block.text) # this is just an example, you can call any webelement method here. 

还有

listofblocks[0]

会return列表的第一个元素,所以

你可以做到

listofblocks[0].click()listofblocks[0].text

等等..

我的回答取决于你想用你拿回来的东西做什么。如您所说,使用 driver.find_elements_by_locator 将 return WebElements 列表。一旦您拥有这些元素,您就可以从它们中提取您需要的任何信息,假设它在那里。查找元素的特定属性:

attr_values = [element.get_attribute('my_attr') for element in listofblocks]

您暗示您可能正在寻找某个不会更改的对象的唯一标识符。为此,您应该与开发人员讨论以帮助识别这些东西。您可能需要结合使用 class 和位置。