由于超时异常,无法选择下拉列表中具有列表项的复选框

时间:2019-10-23 17:48:22

标签: selenium selenium-webdriver selenium-chromedriver

我正在尝试使用Selenium python中的Chrome Web驱动程序在网页上执行自动化。

在一种情况下,我有一个包含80个列表项的下拉列表,每个列表项前面都有一个输入复选框。我需要单击与列表项文本匹配的给定列表中的2个复选框。

由于TimeoutException,无法选择下拉列表中具有列表项的复选框。

我在尝试单击带有下拉列表中的复选框的列表项时遇到超时异常。 注意:

1。还观察到,使用moveToElement单击下拉列表后,就会出现一个加载指示器。

2。下拉列表具有大约80个列表项,并且具有滚动条。 3.此下拉列表直接显示在下面链接中列出的另一个下拉列表中。

我关注了:Not able to select a list item in an unordered list using selenium python

开始使用带有预期条件概念的webdriver等待。

   HTML :
   HTML code:
   =========
   <div class="ms-drop bottom" style="display: block;">
       <ul style="max-height: 400px;">
           <li class="ms-select-all">      
               <label><input type="checkbox" data-name="selectAlls_osVer">
                   [Select all]
               </label>    
           </li>

           <li class="" style="false">     
               <label class=""><input type="checkbox" data-name="selectItems_osVer" value="KK">
                   <span>
                     apq40 
                   </span>
               </label>        
           </li>

           <li class="" style="false">
               <label class=""><input type="checkbox" data-name="selectItems_osVer" value="KK_MR1">
                   <span>
                     sdm845  
                   </span>
               </label>        
           </li>

           <li class="" style="false">
               <label class=""><input type="checkbox" data-name="selectItems_osVer" value="KK_MR2">
                   <span>
                     msm8996 
                   </span>
               </label>        
           </li>
       <li class="" style="false">
               <label class=""><input type="checkbox" data-name="selectItems_osVer" value="KK_MR2">
                   <span>
                     msm8996e 
                   </span>
               </label>        
           </li>
            .....
            ..... so on (approximately 80 elements are there)
       </ul>
   </div>

****尝试以下代码,但出现超时异常:****

语言:Python 司机:硒 浏览器:chrome webdriver:Chromewebdriver

我在尝试单击下拉列表中带有复选框的列表项时遇到超时异常。

chipset = [ 'sdm845', 'msm8996e' ]

for i in range(len(chipset)):
    chipset_name = "{}".format(chipset[i])

    WebDriverWait(driver,20).until(EC.element_to_be_clickable
    ((By.XPATH,"//div[@class='ms-drop bottom']//ul//li[.//span
[normalize-space(text())='"+ chipset_name + "']]//input"))).click()

注意: 1.还观察到一旦使用moveToElement单击下拉列表,就会出现一个加载指示器。

2。下拉列表具有大约80个列表项,并且具有滚动条。 此下拉列表立即显示在另一个下拉列表中。

  1. 我的元素可见,并且它是下拉列表中要选择的第二和第四列表项,并且可见。虽然发生超时异常。 是由于加载图标出现了吗?

  2. 我还想知道如果想要的要选择的列表项不可见并且出现在列表末尾并使其可见,我需要执行向下滚动列表。< / p>

预期:需要对与给定列表中的每个字符串匹配的所需列表项输入复选框执行单击操作。

实际:尝试在包含滚动条的下拉列表中找到列表项时出现超时异常。

1 个答案:

答案 0 :(得分:0)

根据您的代码,您需要等待20秒,才能加载下拉菜单中的元素,但也许Selenium中的滚动出现问题,无法找到所有元素(所有选项),此处的窍门是仅等待组合框中的第一个选项,那么您应该知道下拉列表已打开,您可以选择元素,