java和python之间的行为差​​异

时间:2019-05-04 07:01:27

标签: java python selenium-webdriver

我试图通过使用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中第一次迭代会返回所有元素。如果我想迭代单个元素怎么办呢?

1 个答案:

答案 0 :(得分:2)

这是find_elements_by_xpath的默认行为。请注意,Selenium在python中支持两种不同的方法:find_element_by_xpathfind_elements_by_xpath(注意复数元素)。第一个将返回第一个元素,这似乎是您的目标。第二个返回所有元素的列表。

您可以在here

中阅读更多内容