我正在尝试在Python中使用Selenium在页面上找到几个ProgressBars。令我不安的是,两个具有完全相同内容的对象的行为不同。
(Pdb) ml.colorbars[2]
<framework.web.base.element.ProgressBar object at 0x250dc50>
(Pdb) ml.colorbars[2].element
#### received nothing here
(Pdb) ml.colorbar_2
<framework.web.base.element.ProgressBar object at 0x250dc50>
(Pdb) ml.colorbar_2.element
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="b2dd0af2-53fb-49fd-8595-6cd50c751f99", element="6a49815e-0188-483e-b451-41ed88f916a0")>
(Pdb) ml.colorbars[2]
<framework.web.base.element.ProgressBar object at 0x250dc50>
(Pdb) ml.colorbars[2].element
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="b2dd0af2-53fb-49fd-8595-6cd50c751f99", element="6a49815e-0188-483e-b451-41ed88f916a0")>
这里,colorbar_2
是我给ProgressBar变量的名称。 colorbars[2]
是为存储所有条形而创建的列表中的第三个元素。获取element
的{{1}}属性似乎会激活列表中的相应对象。
---第一次更新---
代码试验如下。
colorbar_2
现在我更喜欢获取包含所有颜色块的列表namespace = locals()
colorbars = []
loc_template = "tr[{}]//div[@class='elWidgets-ProgressBar-bar']"
# instantialization of colorbars
for index in range(bar_num):
colorbar_locator = ('xpath', loc_template.format(index))
namespace['colorbar_%s' % index] = ProgressBar(colorbar_locator)
colorbars.append( namespace['colorbar_%s' % index] )
,而不是获取特定名称为colorbars
,colorbar_1
等的属性,因为变量名称是动态生成的。但是,在获得colorbar_0的colorbar_2
之前,我无法在调试中获得element
colorbars[0]
属性。 (请参阅顶部的调试日志)