0

我遇到了不同的错误。目标是设置一个选项列表选项,以便更新具有各种统计信息的报告页面。选择列表是选择月份和年份,每当我想要这份报告时,它都是上个月的,所以我一直想要的选项是前几个月,最后是 li#2。

所以我有以下

ReportPeriodInput = DriverTransactionSummary.find_element_by_xpath('//*[@id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_DropDown"]/div/ul/li[2]')

如果我做类似的事情

ReportPeriodInput.click()

我收到以下错误

selenium.common.exceptions.ElementNotVisibleException: Message: element not visible

如果我改变我的做法并添加 get_attribute('innerHTML)

ReportPeriodInput = DriverTransactionSummary.find_element_by_xpath('//*[@id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_DropDown"]/div/ul/li[2]').get_attribute('innerHTML')
ReportPeriodInput.click()

我收到以下错误

AttributeError:“str”对象没有属性“click”

选择此元素并将其作为选择列表中的新值的正确方法是什么?有关 HTML 页面的详细信息,请参见下文

<div id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod" class="RadComboBox RadComboBox_Windows7 RadComboBoxWithLabel" style="white-space:normal;">
<label for="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_Input" class="rcbLabel">Period:</label>
<table summary="combobox" border="0" style="border-width:0;border-collapse:collapse;width:250px">
    <tr class="rcbReadOnly">
        <td class="rcbInputCell rcbInputCellLeft" style="width:100%;"><input name="dnn$ctr1001$VolumeByMonthCS$rcbPeriod" type="text" class="rcbInput radPreventDecorate" id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_Input" value="(12)December - 2017" readonly="readonly" /></td>
        <td class="rcbArrowCell rcbArrowCellRight"><a id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_Arrow" style="overflow: hidden;display: block;position: relative;outline: none;">select</a></td>
    </tr>
</table>
<div class="rcbSlide" style="z-index:6000;display:none;">
    <div id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_DropDown" class="RadComboBoxDropDown RadComboBoxDropDown_Windows7 ">
        <div class="rcbScroll rcbWidth">
            <ul class="rcbList">
                <li class="rcbItem">(12)December - 2017</li>
                <li class="rcbItem">(11)November - 2017</li>
                <li class="rcbItem">(10)October - 2017</li>
                <li class="rcbItem">(09)September - 2017</li>
                <li class="rcbItem">(08)August - 2017</li>
                <li class="rcbItem">(07)July - 2017</li>
                <li class="rcbItem">(06)June - 2017</li>
                <li class="rcbItem">(05)May - 2017</li>
                <li class="rcbItem">(04)April - 2017</li>
                <li class="rcbItem">(03)March - 2017</li>
                <li class="rcbItem">(02)February - 2017</li>
                <li class="rcbItem">(01)January - 2017</li>
                <li class="rcbItem">(12)December - 2016</li>
                <li class="rcbItem">(11)November - 2016</li>
                <li class="rcbItem">(10)October - 2016</li>
                <li class="rcbItem">(09)September - 2016</li>
                <li class="rcbItem">(08)August - 2016</li>
                <li class="rcbItem">(07)July - 2016</li>
                <li class="rcbItem">(06)June - 2016</li>
                <li class="rcbItem">(05)May - 2016</li>
                <li class="rcbItem">(04)April - 2016</li>
                <li class="rcbItem">(03)March - 2016</li>
                <li class="rcbItem">(02)February - 2016</li>
                <li class="rcbItem">(01)January - 2016</li>
                <li class="rcbItem">(12)December - 2015</li>
                <li class="rcbItem">(11)November - 2015</li>
                <li class="rcbItem">(10)October - 2015</li>
                <li class="rcbItem">(09)September - 2015</li>
                <li class="rcbItem">(08)August - 2015</li>
                <li class="rcbItem">(07)July - 2015</li>
                <li class="rcbItem">(06)June - 2015</li>
                <li class="rcbItem">(05)May - 2015</li>
                <li class="rcbItem">(04)April - 2015</li>
                <li class="rcbItem">(03)March - 2015</li>
                <li class="rcbItem">(02)February - 2015</li>
                <li class="rcbItem">(01)January - 2015</li>
                <li class="rcbItem">(12)December - 2014</li>
                <li class="rcbItem">(11)November - 2014</li>
                <li class="rcbItem">(10)October - 2014</li>
                <li class="rcbItem">(09)September - 2014</li>
                <li class="rcbItem">(08)August - 2014</li>
                <li class="rcbItem">(07)July - 2014</li>
                <li class="rcbItem">(06)June - 2014</li>
                <li class="rcbItem">(05)May - 2014</li>
                <li class="rcbItem">(04)April - 2014</li>
                <li class="rcbItem">(03)March - 2014</li>
                <li class="rcbItem">(02)February - 2014</li>
                <li class="rcbItem">(01)January - 2014</li>
                <li class="rcbItem">(12)December - 2013</li>
                <li class="rcbItem">(11)November - 2013</li>
                <li class="rcbItem">(10)October - 2013</li>
                <li class="rcbItem">(09)September - 2013</li>
                <li class="rcbItem">(08)August - 2013</li>
                <li class="rcbItem">(07)July - 2013</li>
                <li class="rcbItem">(06)June - 2013</li>
                <li class="rcbItem">(05)May - 2013</li>
                <li class="rcbItem">(04)April - 2013</li>
                <li class="rcbItem">(03)March - 2013</li>
                <li class="rcbItem">(02)February - 2013</li>
                <li class="rcbItem">(01)January - 2013</li>
                <li class="rcbItem">(12)December - 2012</li>
                <li class="rcbItem">(11)November - 2012</li>
                <li class="rcbItem">(10)October - 2012</li>
                <li class="rcbItem">(09)September - 2012</li>
                <li class="rcbItem">(08)August - 2012</li>
                <li class="rcbItem">(07)July - 2012</li>
                <li class="rcbItem">(06)June - 2012</li>
                <li class="rcbItem">(05)May - 2012</li>
                <li class="rcbItem">(04)April - 2012</li>
                <li class="rcbItem">(03)March - 2012</li>
                <li class="rcbItem">(02)February - 2012</li>
                <li class="rcbItem">(01)January - 2012</li>
                <li class="rcbItem">(12)December - 2011</li>
                <li class="rcbItem">(11)November - 2011</li>
                <li class="rcbItem">(10)October - 2011</li>
                <li class="rcbItem">(09)September - 2011</li>
                <li class="rcbItem">(08)August - 2011</li>
                <li class="rcbItem">(07)July - 2011</li>
                <li class="rcbItem">(06)June - 2011</li>
                <li class="rcbItem">(05)May - 2011</li>
                <li class="rcbItem">(04)April - 2011</li>
                <li class="rcbItem">(03)March - 2011</li>
                <li class="rcbItem">(02)February - 2011</li>
                <li class="rcbItem">(01)January - 2011</li>
                <li class="rcbItem">(12)December - 2010</li>
                <li class="rcbItem">(11)November - 2010</li>
                <li class="rcbItem">(10)October - 2010</li>
                <li class="rcbItem">(09)September - 2010</li>
                <li class="rcbItem">(08)August - 2010</li>
                <li class="rcbItem">(07)July - 2010</li>
                <li class="rcbItem">(06)June - 2010</li>
                <li class="rcbItem">(05)May - 2010</li>
                <li class="rcbItem">(04)April - 2010</li>
                <li class="rcbItem">(03)March - 2010</li>
                <li class="rcbItem">(02)February - 2010</li>
                <li class="rcbItem">(01)January - 2010</li>
                <li class="rcbItem">(12)December - 2009</li>
                <li class="rcbItem">(11)November - 2009</li>
                <li class="rcbItem">(10)October - 2009</li>
                <li class="rcbItem">(09)September - 2009</li>
                <li class="rcbItem">(08)August - 2009</li>
                <li class="rcbItem">(07)July - 2009</li>
                <li class="rcbItem">(06)June - 2009</li>
                <li class="rcbItem">(05)May - 2009</li>
                <li class="rcbItem">(04)April - 2009</li>
                <li class="rcbItem">(03)March - 2009</li>
                <li class="rcbItem">(02)February - 2009</li>
                <li class="rcbItem">(01)January - 2009</li>
                <li class="rcbItem">(12)December - 2008</li>
                <li class="rcbItem">(11)November - 2008</li>
                <li class="rcbItem">(10)October - 2008</li>
                <li class="rcbItem">(09)September - 2008</li>
                <li class="rcbItem">(08)August - 2008</li>
                <li class="rcbItem">(07)July - 2008</li>
                <li class="rcbItem">(06)June - 2008</li>
                <li class="rcbItem">(05)May - 2008</li>
                <li class="rcbItem">(04)April - 2008</li>
                <li class="rcbItem">(03)March - 2008</li>
                <li class="rcbItem">(02)February - 2008</li>
                <li class="rcbItem">(01)January - 2008</li>
                <li class="rcbItem">(12)December - 2007</li>
                <li class="rcbItem">(11)November - 2007</li>
                <li class="rcbItem">(10)October - 2007</li>
                <li class="rcbItem">(09)September - 2007</li>
                <li class="rcbItem">(08)August - 2007</li>
                <li class="rcbItem">(07)July - 2007</li>
                <li class="rcbItem">(06)June - 2007</li>
                <li class="rcbItem">(05)May - 2007</li>
                <li class="rcbItem">(04)April - 2007</li>
                <li class="rcbItem">(03)March - 2007</li>
                <li class="rcbItem">(02)February - 2007</li>
                <li class="rcbItem">(01)January - 2007</li>
                <li class="rcbItem">(12)December - 2006</li>
                <li class="rcbItem">(11)November - 2006</li>
                <li class="rcbItem">(10)October - 2006</li>
                <li class="rcbItem">(09)September - 2006</li>
                <li class="rcbItem">(08)August - 2006</li>
                <li class="rcbItem">(07)July - 2006</li>
                <li class="rcbItem">(06)June - 2006</li>
                <li class="rcbItem">(05)May - 2006</li>
                <li class="rcbItem">(04)April - 2006</li>
                <li class="rcbItem">(03)March - 2006</li>
                <li class="rcbItem">(02)February - 2006</li>
                <li class="rcbItem">(01)January - 2006</li>
                <li class="rcbItem">(12)December - 2005</li>
                <li class="rcbItem">(11)November - 2005</li>
                <li class="rcbItem">(10)October - 2005</li>
                <li class="rcbItem">(09)September - 2005</li>
                <li class="rcbItem">(08)August - 2005</li>
                <li class="rcbItem">(07)July - 2005</li>
                <li class="rcbItem">(06)June - 2005</li>
                <li class="rcbItem">(05)May - 2005</li>
                <li class="rcbItem">(04)April - 2005</li>
                <li class="rcbItem">(03)March - 2005</li>
                <li class="rcbItem">(02)February - 2005</li>
                <li class="rcbItem">(01)January - 2005</li>
                <li class="rcbItem">(12)December - 2004</li>
                <li class="rcbItem">(11)November - 2004</li>
                <li class="rcbItem">(10)October - 2004</li>
                <li class="rcbItem">(09)September - 2004</li>
                <li class="rcbItem">(08)August - 2004</li>
                <li class="rcbItem">(07)July - 2004</li>
                <li class="rcbItem">(06)June - 2004</li>
                <li class="rcbItem">(05)May - 2004</li>
                <li class="rcbItem">(04)April - 2004</li>
                <li class="rcbItem">(03)March - 2004</li>
                <li class="rcbItem">(02)February - 2004</li>
                <li class="rcbItem">(01)January - 2004</li>
            </ul>
        </div>
    </div>
</div>
<input id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_ClientState" name="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_ClientState" type="hidden" />

以及它的样子:

在此处输入图像描述

4

4 回答 4

0

我对python不太熟悉,但知道它在其他语言中是如何工作的,你应该能够使用获取元素列表,.find_elements_by_css_selector()然后单击列表中的第二个元素。

options = DriverTransactionSummary.find_elements_by_css_selector(".rcbItem")
options[1].click();

当然,您需要先单击下拉菜单才能单击菜单中的第二个li元素。希望这可以帮助。

于 2017-12-21T15:57:24.400 回答
0

基于其他人的帮助,最简单(可能不是最好)的方法是确保单击选项列表字段本身,然后我能够让它找到元素 [2]。

ReportPeriodClick = DriverTransactionSummary.find_element_by_xpath('//*[@id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_Input"]').click()
ReportPeriodClick2 = DriverTransactionSummary.find_element_by_xpath('//*[@id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_DropDown"]/div/ul/li[2]').click()
于 2017-12-21T20:41:59.317 回答
0

让我们首先分析一下您的代码试验发生了什么。

  • 您已经确定WebElement并尝试调用click()如下:

    ReportPeriodInput = DriverTransactionSummary.find_element_by_xpath('//*[@id="dnn_ctr1001_VolumeByMonthCS_rcbPeriod_DropDown"]/div/ul/li[2]')
    ReportPeriodInput.click()
    

    但这与. <li>_ 因此你会看到:optionDropDown

    selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
    
  • 接下来,您提取了innerHTML上述WebElement返回 aString并尝试对其调用click()的内容。click()方法是为 定义的WebElement。由于StringClass 对象没有click()关联的方法,您会看到错误:

    AttributeError: 'str' object has no attribute 'click'
    

解决方案 :

要单击DropDown并选择(11)November - 2017您必须的选项:

  • 识别并单击它,如下所示:Dropdown WebElement

    ReportPeriodInput = DriverTransactionSummary.find_element_by_xpath("//div[@class='RadComboBoxDropDown RadComboBoxDropDown_Windows7' and contains(@id,'VolumeByMonthCS_rcbPeriod_DropDown')]")
    ReportPeriodInput.click()
    
  • 接下来,您需要单击以下预期optionDropdown内容:

    ReportPeriodInputOption = DriverTransactionSummary.find_element_by_xpath("//div[@class='RadComboBoxDropDown RadComboBoxDropDown_Windows7' and contains(@id,'VolumeByMonthCS_rcbPeriod_DropDown')]/div/ul/li[@class='rcbItem' and contains(.,'November - 2017')]")
    ReportPeriodInputOption.click()
    
于 2017-12-22T13:55:24.290 回答
0

正如我所看到的,您已经为每个li上课,选择第二个li或说特定孩子的最佳方法是使用css_selector方法。

driver.find_element_by_css_selector("ul .rcbItem:nth-child(2)").click()

上面的代码会选择(11)November - 2017

于 2020-02-12T12:29:40.960 回答