我试图通过使用python中的xpath访问顶部//div[@class="Class1"]
来获取所有Web元素的列表。
HTML代码:
<div id="ID1" class="Class1">
<div id="SubID1" class="Class2">
<table id="Tid1" class="Class3">
<tbody>
<tr>
<td>
<span class='Class4'>Samplecontrol1</span>
</td>
</tr>
</tbody>
</table>
</div>
<div id="SubID2" class="Class2">
<table id="Tid2" class="Class3">
<tbody>
<tr>
<td>
<span class='Class4'>Samplecontrol2</span>
</td>
</tr>
</tbody>
</table>
</div>
<div id="SubID3" class="Class2">
<table id="Tid3" class="Class3">
<tbody>
<tr>
<td>
<span class='Class4'>Samplecontrol3</span>
</td>
</tr>
</tbody>
</table>
</div>
<div id="SubID4" class="Class2">
<table id="Tid4" class="Class3">
<tbody>
<tr>
<td>
<span class='Class4'>Samplecontrol4</span>
</td>
</tr>
</tbody>
</table>
</div>
<div id="SubID5" class="Class2">
<table id="Tid5" class="Class3">
<tbody>`enter code here`
<tr>
<td>
<span class='Class4'>Samplecontrol5</span>
</td>
</tr>
</tbody>
</table>
</div>
Python代码:
def MainLogin(self):
#wDriver = webdriver.Firefox(executable_path='C:/Eclipse/SelDriver/geckodriverWin64.exe')
eleToolBox = webelement.FirefoxWebElement
x =''
index=0
self.wDriver.get(self.URL)
self.wDriver.maximize_window()
eleToolBox = self.wDriver.find_elements_by_xpath('//div[@class="Class1"]')
self.wDriver.implicitly_wait(10)
for item in eleToolBox:
print(item.text)
在第一个循环print(item.text)
语句中返回所有元素
输出:
Samplecontrol1
Samplecontrol2
Samplecontrol3
Samplecontrol4
Samplecontrol5
这让我很困惑。我期待输出Samplecontrol1
的值。
我通过采用List <Webelements>
,迭代器接口来尝试在Java中进行同样的操作,并且按我的期望工作。在Java中,我们可以通过索引访问子元素的值来访问其properties \ values。
我的困惑是为什么在python中第一次迭代会返回所有元素。如果我想迭代单个元素怎么办呢?
答案 0 :(得分:2)
这是find_elements_by_xpath
的默认行为。请注意,Selenium在python中支持两种不同的方法:find_element_by_xpath
和find_elements_by_xpath
(注意复数元素)。第一个将返回第一个元素,这似乎是您的目标。第二个返回所有元素的列表。
您可以在here
中阅读更多内容