Selenium无法更改下拉列表选择

时间:2016-09-01 10:08:03

标签: python html selenium selenium-webdriver drop-down-menu

以下是孤立的HTML代码:

<span style="position: relative; width: 100%; display: inline-block;">
    <select id="0ac88542d16d6200fb983d094f655c76_select" class="form-control">
        <option value="display_value">Number</option>
        <option value="sys_class_name">Type</option>
    </select>
</span>

使用Python Selenium,单击下拉元素将其展开:

search_elemets = driver.find_elements_by_xpath("//*[@class='form-control']")
search_elemets[0].click()

现在让我们尝试不同的场景,将其选择更改为所需的值。

选项1

Select(search_elemets[0]) \
    .select_by_visible_text("Number")
driver.find_elements_by_tag_name('option')[1].click()

选项2

Select(search_elemets[0]) \
    .select_by_value("display_value")
driver.find_elements_by_tag_name('option')[1].send_keys(Keys.RETURN)

选项3

for option in search_elemets[0].find_elements_by_tag_name('option'):
    if option.text == 'Number':

        # Use one of the options below
        # Option 3.1
        Select(search_elemets[0]) \
            .select_by_visible_text("Number")
        option.click()
        break

        # Option 3.2
        actions = ActionChains(driver)
        actions.move_to_element(option)
        actions.click(option)
        actions.perform()
        break

所有尝试都会导致由webdriver执行的可视化点击,但是 之后价值没有改变..

4 个答案:

答案 0 :(得分:0)

班级form-control可能会为您提供其他元素。尝试按部分ID

找到
search_elemet = driver.find_element_by_css_selector('[id*="select"]')
Select(search_elemet).select_by_visible_text('Number')
# or
Select(search_elemet).select_by_value('display_value')

答案 1 :(得分:0)

@katericata你的html就像 - 数字类型Type2 Type3

和我的网络驱动程序类一样,在这里你可以将下拉项替换为你要选择的Type2,type 3等。

driver.findElement(By.xpath(&#34;代码&#39;]&#34))的SendKeys(&#34;类型3&#34)。如果有任何疑虑,请告诉我。

答案 2 :(得分:0)

执行此操作的正确方法是使用支持UI的“选择”选项。 e.g:

from selenium.webdriver.support.ui import Select

driver = webdriver.Firefox()

select_element = Select(driver.find_element_by_id("0ac88542d16d6200fb983d094f655c76_select"))
print [o.text for o in select_element.options] # these are string-s
select_element.select_by_visible_text("Type")
# or 
select_element.select_by_value("display_value")
# or 
select_element.select_by_index(1)

文档here并归功于Daniel Abel here

答案 3 :(得分:0)

let arr = [[121.09900,56.5999], [123.94949, 45.0099], [...] ]
let coordinates = arr.map { CLLocationCoordinate2D(latitude: $0[0], longitude: $0[1]) }