消息:元 而试图通过硒的下拉菜单中点击选项不能被滚动到视图 消息:元 而试图通过硒的下拉菜单中点击

2019-05-12 13:57发布

我想选择一个下拉菜单并选择一个选项。 我使用的是最新版本的硒,Firefox的最新版本,geckodriver的最新版本,和Python的最新版本。

这里是我的问题:当我试图选择一个选项,它给了我下面的错误:

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

我曾尝试各种方式环游这个问题,但没有一个似乎工作。 下面是一些我试过的办法的。

mySelectElement = browser.find_element_by_id('providerTypeDropDown')
dropDownMenu = Select(mySelectElement)
dropDownMenu.select_by_visible_text('Professional')

mySelectElement = browser.find_element_by_id('providerTypeDropDown')
dropDown = Select(mySelectElement)
for option in dropDown.options:
    message = option.get_attribute('innerText')
    print(message)
    if message == 'Professional':
        print("Exists")
        dropDown.select_by_visible_text(message) 
        break

element = browser.find_element_by_id('providerTypeDropDown')
browser.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", element, "Professional")

HTML代码遵循通常选择标签和选项标签。 任何帮助表示赞赏。 HTML代码包含下面。

<select data-av-chosen="providerTypes" id="providerTypeDropDown" data-placeholder="Please Select a Provider Type" name="providerTypeDropDown"
class="chzn-select input-full ng-pristine chzn-done ng-invalid ng-invalid-provider-type" data-ng-options="providerType.value for providerType in request.models.providerTypes"
data-ng-model="request.models.providerType" data-av-validator-field="providerType" data-disable-search-threshold="5" style="display; none;">
    <option value="" class="">Please Select a Provider Type</option>
    <option value="0">Professional</option>
    <option value="1">Institutional</option>
</select> 

打印语句是没有测试/代码跟踪望目。

Answer 1:

此错误消息...

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

......意味着<option>你的程序试图与互动项目无法滚动到视图。

所需元素的HTML将会给我们的错误背后的一些想法。 然而,似乎所需的元素不是clickable /在中视口 。 为了解决你所诱导WebDriverWait元素是可以点击的 ,您可以采用如下方案问题:

mySelectElement = browser.find_element_by_id('providerTypeDropDown')
dropDownMenu = Select(mySelectElement)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='providerTypeDropDown']//options[contains(.,'Professional')]")))
dropDownMenu.select_by_visible_text('Professional')

注意 :您要添加以下的进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.select import Select


Answer 2:

尝试添加等待:

mySelectElement = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "providerTypeDropDown")))
mySelectElement.click()

它会等待至少10秒钟,直到元素可点击,然后单击。

此外,我不中你的代码中看到,您单击下拉按钮,打开下拉菜单。 找到这个按钮,还添加了等待并点击它,你选择的选项之前。 希望能帮助到你。

注:此代码,您必须添加一些进口:

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


文章来源: Message: Element