如何使用Selenium

时间:2019-01-31 11:35:43

标签: python selenium-chromedriver

我想知道如何从网站的下拉列表中选择选项。

html在这里

<thead>
    <td style="width: 40%;">
        <select name="product_size" id="sct-size" data-md-selectize>
            <option value="-">Choose Size</option>
                                                    <option value="323">XS</option>
                                                    <option value="324">S</option>
                                                    <option value="325">M</option>
                                                    <option value="326">L</option>
                                                    <option value="327">XL</option>
                                                    <option value="328">XXL</option>
                                                    <option value="342">1 years old</option>
                                                    <option value="343">5 years old</option>
                                                    <option value="344">8 years old</option>
                                                    <option value="345">12 years old</option>
                                                </select>
    </td>
    <td style="width: 40%;">
        <select name="product_color" id="sct-color" data-md-selectize>
            <option value="-">Choose Color</option>
                                                    <option value="594">N/A</option>
                                                </select>
    </td>
    <td style="width: 19%;"><input type="text" class="md-input" name="product_stock_" id="inp-stock" placeholder="Stock" style="margin-top: -11px;text-align: center;"/></td>
    <td style="width: 1%;"><a href="#" id="btn-addstock" style="margin-top: 5px; display: block;" title="Add Stock"><i class="material-icons">&#xE148;</i></a></td>
</thead>

我要选择“选择大小”,然后选择“ S”选项。我尝试了这段代码。

from selenium import webdriver
from selenium.webdriver.support.select import Select

mySelect = Select(driver.find_element_by_id("sct-size"))
mySelect.select_by_visible_text("S")

但是得到了错误

  

NoSuchElementException:消息:无法找到带有可见文本的元素:S

我在stackoverflow上已经找到了很多关于此问题的解决方案。它假定从下拉菜单中选择“ S”,但没有选择。我不知道我还能尝试什么。

谢谢。

已经尝试过

  1. https://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver
  2. Select a dropdown using Python + Selenium

编辑1

我也尝试过

mySelect = Select(driver.find_element_by_id("sct-size"))
mySelect.select_by_value("323")

但出现此错误

  

NoSuchElementException:消息:无法找到值为323的选项

我也尝试更改名称的find_element方法

obj = Select(driver.find_element_by_name('product_size'))
obj.select_by_index(1)

出现错误

  

NoSuchElementException:消息:无法找到索引为1的选项

也许find_element是问题?我不知道。

编辑2

我厌倦了使用Google chrome中的“检查”工具,发现页面加载时html仅加载了1个选项(在本例中为“选择大小”)。这说明了为什么会出错。

页面加载时

html代码。

<thead>
<td style="width: 40%;">
    <select name="product_size" id="sct-size" data-md-selectize>
        <option value="-">Choose Size</option>                                                    
</td>
<td style="width: 40%;">
    <select name="product_color" id="sct-color" data-md-selectize>
        <option value="-">Choose Color</option>

                                            </select>
</td>
<td style="width: 19%;"><input type="text" class="md-input" name="product_stock_" id="inp-stock" placeholder="Stock" style="margin-top: -11px;text-align: center;"/></td>
<td style="width: 1%;"><a href="#" id="btn-addstock" style="margin-top: 5px; display: block;" title="Add Stock"><i class="material-icons">&#xE148;</i></a></td>
</thead>

尝试了Seema Nair解决方案,但出现了其他错误

  

AttributeError:“选择”对象没有属性“点击”

我的新代码是

mySelect = Select(driver.find_element_by_id("sct-size")) 
mySelect.click() 
mySelect.select_by_visible_text("S")

所以,新问题是,我如何单击下拉菜单以显示选项代码?

1 个答案:

答案 0 :(得分:1)

您可以通过可见的文本或值选择原始代码。

我遇到了类似的问题,这是因为在从下拉列表中选择值之前,我必须单击下拉链接,然后执行选择。

因此,在Select之前添加一个click方法,您最初使用的代码将起作用。