在Selenium

时间:2017-07-23 20:31:44

标签: javascript python selenium

注意:Python Selenium Fails to Trigger Javascript Event类似

我正在使用Selenium编写一个python脚本来导航受密码保护的网站。我需要的一个页面有一个表,它使用Javascript OnKeyDownOnKeyUp事件来选择特定的行,然后再继续下一页。

在我的脚本中,我尝试使用myElement.click()来选择行,但这似乎不会触发页面所需的Javascript事件。行周围会出现一个精细的虚线轮廓,但行颜色不会改变,并且页面会抛出一个错误,我需要在继续之前选择一行。

供参考,这是我正在使用的脚本:

#!/usr/bin/python

# Setup Selenium
from selenium import webdriver
browser = webdriver.Firefox(firefox_binary='/usr/bin/firefox', executable_path="./geckodriver")
browser.implicitly_wait(10) # Continue checking for up to 10 secs before saying something doesn't exist

# Get to the login page
browser.get('https://example.com/Default.aspx')

# Login
browser.find_element_by_id('username').send_keys('mister-sir')
browser.find_element_by_id('password').send_keys('notmypassword')
browser.find_element_by_css_selector('.btn').click()

# Get to the application
browser.find_element_by_id('ctl00_Banner1_ModuleList_ctl01_lnkModule').click()
browser.find_element_by_id('ctl00_Content_rbtTopLevel25').click()
browser.find_element_by_id('ctl00_btnContinue').click()

# Select the row
browser.find_elements_by_xpath('//table[@id=\'ctl00_Content_grdFloors_grid\']/tbody/tr[3]/td').click()

#Continue
browser.find_element_by_id('ctl00_btnContinue').click() # I get an error here, as the previous line didn't select the correct row

#browser.stop()

修改

以下是我正在尝试选择的表格的代码段:

<div>
    <div>
        <table class="block-table " id="ctl00_Content_grdFloors_grid">
            <tr class="block-header-row">
                <th align="left" scope="col">Floor</th><th align="left" scope="col">Single - Beds</th><th align="left" scope="col">Double - Beds</th><th align="left" scope="col">Triple - Beds</th><th align="left" scope="col">Quad - Beds</th><th align="left" scope="col">Other</th>
            </tr><tr class="row-detail" RoomLocationFloorSuiteID="63" OnClick="selectGrid_gridItemClick(false, this, &#39;63&#39;, &#39;&#39;, &#39;ctl00_Content_grdFloors_txtRowID&#39;, &#39;ctl00_Content_grdFloors_txtRowAttributes&#39;)" OnMouseOver="selectGrid_gridHighlight(this, &#39;63&#39;)" OnMouseOut="selectGrid_gridUnHighlight(this, &#39;63&#39;)" OnKeyDown="selectGrid_gridKeyDown(event)" OnKeyUp="selectGrid_gridKeyUp(event, false, this, &#39;63&#39;, &#39;&#39;, &#39;ctl00_Content_grdFloors_txtRowID&#39;, &#39;ctl00_Content_grdFloors_txtRowAttributes&#39;)" TabIndex="0" aria-label="myBuilding-Floor 02">
                <td align="left">myBuilding-Floor 02</td><td align="left">1</td><td align="left">0</td><td align="left">0</td><td align="left">0</td><td align="left">0</td>
            </tr><tr class="row-detail" RoomLocationFloorSuiteID="64" OnClick="selectGrid_gridItemClick(false, this, &#39;64&#39;, &#39;&#39;, &#39;ctl00_Content_grdFloors_txtRowID&#39;, &#39;ctl00_Content_grdFloors_txtRowAttributes&#39;)" OnMouseOver="selectGrid_gridHighlight(this, &#39;64&#39;)" OnMouseOut="selectGrid_gridUnHighlight(this, &#39;64&#39;)" OnKeyDown="selectGrid_gridKeyDown(event)" OnKeyUp="selectGrid_gridKeyUp(event, false, this, &#39;64&#39;, &#39;&#39;, &#39;ctl00_Content_grdFloors_txtRowID&#39;, &#39;ctl00_Content_grdFloors_txtRowAttributes&#39;)" TabIndex="0" aria-label="myBuilding-Floor 03">
                <td align="left">myBuilding-Floor 03</td><td align="left">0</td><td align="left">0</td><td align="left">1</td><td align="left">0</td><td align="left">0</td>
            </tr><tr class="row-detail" RoomLocationFloorSuiteID="71" OnClick="selectGrid_gridItemClick(false, this, &#39;71&#39;, &#39;&#39;, &#39;ctl00_Content_grdFloors_txtRowID&#39;, &#39;ctl00_Content_grdFloors_txtRowAttributes&#39;)" OnMouseOver="selectGrid_gridHighlight(this, &#39;71&#39;)" OnMouseOut="selectGrid_gridUnHighlight(this, &#39;71&#39;)" OnKeyDown="selectGrid_gridKeyDown(event)" OnKeyUp="selectGrid_gridKeyUp(event, false, this, &#39;71&#39;, &#39;&#39;, &#39;ctl00_Content_grdFloors_txtRowID&#39;, &#39;ctl00_Content_grdFloors_txtRowAttributes&#39;)" TabIndex="0" aria-label="myBuilding-Floor 10">
                <td align="left">myBuilding-Floor 10</td><td align="left">0</td><td align="left">1</td><td align="left">0</td><td align="left">0</td><td align="left">0</td>
            </tr>
        </table>
    </div>

    <input name="ctl00$Content$grdFloors$txtRowID" type="hidden" id="ctl00_Content_grdFloors_txtRowID" />
    <input name="ctl00$Content$grdFloors$txtRowAttributes" type="hidden" id="ctl00_Content_grdFloors_txtRowAttributes" />
</div>

0 个答案:

没有答案