简体   繁体   English

选择第二个<li>选项列表中的元素 Selenium

[英]Select 2nd <li> element in a picklist Selenium

I'm having a doozy running into different errors.我遇到了不同的错误。 The goal is set a picklist option so that a report page with various stats updates.目标是设置一个选项列表选项,以便更新具有各种统计信息的报告页面。 The picklist is to choose months and years and whenever I want this report it's for the previous month so the option i always want is the previous months which ends up being li#2.选择列表是选择月份和年份,每当我想要这份报告时,它都是上个月的,所以我总是想要的选项是前几个月,最终是 li#2。

So I have the following所以我有以下

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

If i do something like如果我做类似的事情

ReportPeriodInput.click()

I get the following error我收到以下错误

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

If I alter how I do it and add get_attribute('innerHTML)如果我改变我的做法并添加 get_attribute('innerHTML)

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

I get the following error我收到以下错误

AttributeError: 'str' object has no attribute 'click' AttributeError: 'str' 对象没有属性 'click'

What is the correct way to select this element and have it be the new value in the picklist?选择此元素并将其作为选项列表中的新值的正确方法是什么? See below for the HTML page details请参阅下面的 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" />

And an image of what that looks like:以及看起来像什么的图像:

在此处输入图片说明

I'm not too familiar with python but knowing how it works in other languages you should be able to just get a list of elements using .find_elements_by_css_selector() and then clicking on the second element in the list.我对 python 不太熟悉,但知道它在其他语言中的工作原理,您应该能够使用.find_elements_by_css_selector()获取元素列表,然后单击列表中的第二个元素。

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

Of course, you would need to click on the dropdown menu first in order to click on the second li element in the menu.当然,您需要先单击下拉菜单才能单击菜单中的第二个li元素。 Hope this helps.希望这可以帮助。

Based on others help the easiest (may not be the best) way to do it was to make sure to click on the picklist field itself, then I was able to have it find element[2].基于其他人的帮助,最简单的(可能不是最好的)方法是确保单击选项列表字段本身,然后我就可以让它找到元素 [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()

Let us analyze first what happened with your code trials.让我们首先分析您的代码试验发生了什么。

  • You have identified an WebElement and tried to invoke click() as follows :您已经确定了一个WebElement并尝试调用click()如下:

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

    But this <li> is an look alike of option within the DropDown .但是这个<li>看起来很像DropDownoption Hence you see :因此你会看到:

     selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
  • Next you have extracted the innerHTML of the above WebElement which returns a String and tried to invoke click() on it.接下来,您提取了上述WebElementinnerHTML ,它返回一个String并尝试在其上调用click() click() method is defined for WebElement . click()方法是为WebElement定义的。 As String Class objects have no click() method associated you see the error :由于String Class 对象没有关联的click()方法,您会看到错误:

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

Solution :解决方案 :

To click on the DropDown and select the option (11)November - 2017 you have to :要单击DropDown并选择选项(11)November - 2017您必须:

  • Identify the Dropdown WebElement and click on it as follows :确定Dropdown WebElement并按如下方式单击它:

     ReportPeriodInput = DriverTransactionSummary.find_element_by_xpath("//div[@class='RadComboBoxDropDown RadComboBoxDropDown_Windows7' and contains(@id,'VolumeByMonthCS_rcbPeriod_DropDown')]") ReportPeriodInput.click()
  • Next you need to click the intended option from the Dropdown as follows :接下来,您需要从Dropdown单击预期的option ,如下所示:

     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()

As I can see that you have given class to each li , the best way to select the second li or say a particular child is using css_selector method.正如我所看到的,您已经为每个li提供了类,选择第二个li或说特定孩子的最佳方法是使用css_selector方法。

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

The above code will select (11)November - 2017以上代码将选择(11)November - 2017

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM