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

Selenium-如果值位于html中的<table>标记内而不是<option>下,则从下拉列表中选择项目

  •  1
  • sjkp  · 技术社区  · 7 年前

    下面是html代码的一个片段,它在应用程序中显示为下拉列表。我无法使用Selenium中的select class从下拉列表中选择特定值-可能是因为它没有“Option”标记?。有没有办法选择这个项目?

    -更新:这有一个关于可见性的父标记。基本上是告诉用户,只有在用户单击下拉箭头时,元素才可见。 “<input type=“隐藏”*****”

    例如,在测试执行期间,我需要从列表中选择“我是选项2”。

    <div id="xyz" class="DropdownInnerContainer" style="z-index:99999;">
    <table id="abc" class="DropdownItemContainer" list="1000020">
        <tr class="">
            <td value="" index="0" title="">&nbsp;
            </td>
            <td class="BorderCell"></td>
        </tr>
        <tr class="">
            <td value="I am option1" index="1" plid="1002827">I am option1</td>
            <td class="BorderCell"></td>
        </tr>
        <tr class="">
            <td value="I am option2" index="2" plid="1002828">I am option2</td>
            <td class="BorderCell"></td>
        </tr>
        <tr class="">
            <td value="I am option3" index="3" plid="1002829">I am option3</td>
            <td class="BorderCell"></td>
        </tr>
        <tr class="">
            <td value="I am option4" index="4" plid="1002830">I am option4</td>
            <td class="BorderCell"></td>
        </tr>
    </table>
    

    3 回复  |  直到 7 年前
        1
  •  1
  •   JacobB    7 年前

    如果要选择的td内的文本是唯一的,则可以单击id为“abc”的表格元素,然后单击以下元素。提供的代码是C#,但可以很容易地进行翻译。

    IWebElement option = _driver.FindElement(By.XPath("//td[text()='I am option2']"));
    
        2
  •  1
  •   sjkp    7 年前

    由于下拉选项位于a<表(>,Select类无法识别列表选项。下面是我所做的:

    首先单击()下拉列表,打开菜单:

    driver.findElement(By.xpath(".//*[@id='abc01_tbl']/div/div")).click();
    

    然后使用contains()方法传递值,然后单击()。

    driver.findElement(By.xpath(".//*[@id='xyz01_tbl']/tbody/tr/td[1][contains(text(),'I am option2')]")).click();
    
        3
  •  1
  •   Sameer Kalaria    7 年前

    在此方案中不能使用Select,因为下拉列表中没有任何Select标记。下拉菜单位于表体下方。

    请在“选择选项表单”下拉列表中使用下面的xpath。

    driver.findElement(By.xpath("//table[@id='abc']/tr[td[text()='your option text']]/td"));