代码之家  ›  专栏  ›  技术社区  ›  Michael

元素<option>无法滚动到视图中

  •  1
  • Michael  · 技术社区  · 6 年前

    我正在尝试用硒来选择一个值。

    这是目标 HTML :

      <div class="main_table">
            <div class="fields filter_center clearfix" style="margin: 0 auto;">
                <div class="form-group clearfix">                    
                    <div class="col-sm-8">
                        <select class="form-control input-sm js-example-basic-single" name="city">
                                                                <option style="padding: 3px;" value="213">New York</option>
                                                                <option style="padding: 3px;" value="2">Washington</option>
                                                                <option style="padding: 3px;" value="47">Los Angeles</option>
    

    我的第一次尝试:

    from selenium.webdriver.support.wait import WebDriverWait
    
    
    region_element = Select(drv.find_element_by_tag_name("select"))
    region_element.select_by_value("2")
    

    这就提出:

    selenium.common.exceptions.ElementNotInteractableException: Message: Element <option> could not be scrolled into view
    

    我的尝试2:

    region_element = WebDriverWait(drv, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@name='city']")))
    region_element = Select(region_element)
    region_element.select_by_value("2")
    

    再一次:

    selenium.common.exceptions.elementNotInteractiobleException:message:element<option>无法滚动到视图中
    

    尝试3(等待特定选项可单击):

    region_element = WebDriverWait(drv, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@name='city']")))
    
    WebDriverWait(drv, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//select[@name='city']/option[text()='Washington']")))
    
    region_element = Select(region_element)
    region_element.select_by_value("2")
    

    再一次:

    selenium.common.exceptions.elementNotInteractiobleException:message:element<option>无法滚动到视图中
    

    你能帮我纠正一下吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Infern0    6 年前

    如果选项菜单没有隐藏在包装器中,例如另一个下拉菜单或嵌套页面,请尝试移动操作。

    element = driver.find_element_by_xpath("//select[@name='city']")
    
    actions = ActionChains(driver)
    actions.move_to_element(element).perform()
    

    或者使用javascript执行器

    driver.execute_script("arguments[0].scrollIntoView();", element)