如何选择动态ID下拉列表c#

时间:2017-02-13 13:59:29

标签: c# selenium xpath selenium-webdriver

我正在使用selenium webdriver来开发UI自动化项目。 在一个页面中,我在下拉列表中有一个动态元素。

这是使用selenium IDE找到的Xpath的一个示例:

driver.FindElement(By.XPath("//a[@id='ui-id-89']/strong")).Text);

ID是动态的,在此示例中为 89 。我试着用:

driver.FindElement(By.XPath("//a[contains(@id,'ui-id']"))

driver.FindElement(By.CssSelector("*[id^='ui-id'][id$='> strong']"))

没有任何效果,任何人都有解决方案可以帮助我吗?

这是HTML:

<div id="main" role="main">
  <div class="center">
    <div class="content">
      <h2>Extrato Financeiro</h2>
      <p></p>
      <form method="post" class="search jNice" id="form-filter" name="form-filter" action="">
        <fieldset >
          <label  for='labelcmbCodPeriodoLetivo'  id='labelcmbCodPeriodoLetivo'   name="labelcmbCodPeriodoLetivo"  dev-comp="true"  dev-id='labelcmbCodPeriodoLetivo'   value="Período Letivo"  dev-event=""  dev-action="" >Período Letivo</label >
        </fieldset>
        <fieldset >
          <select  id='cmbCodPeriodoLetivo'   name="cmbCodPeriodoLetivo"  dev-comp="true"  dev-id='cmbCodPeriodoLetivo'   value="2801"  dev-height='38px'   dev-width='4'   dev-height='38px'   dev-event=""  dev-action="" text-sel="Selecione" dev-select-link="" dev-select-codigo=""  dev-select-param='' >
            <option value=' ' id='cmbCodPeriodoLetivo_opt_sel0' > Selecione </option>
            <option value=' ' id='cmbCodPeriodoLetivo_opt_sel1'> ---------------- </option>
            <option value='{"SGLPERIODOLETIVO":"2017\/1","CODPERIODOLETIVO":"2801"}'  selected  id='cmbCodPeriodoLetivo_opt0'   name="cmbCodPeriodoLetivo_opt0"  dev-comp="true"  dev-id='cmbCodPeriodoLetivo_opt0'   dev-event=""  dev-action="">2017/1</option> 
            <option value='{"SGLPERIODOLETIVO":"2016\/2","CODPERIODOLETIVO":"2713"}'  id='cmbCodPeriodoLetivo_opt1'   name="cmbCodPeriodoLetivo_opt1"  dev-comp="true"  dev-id='cmbCodPeriodoLetivo_opt1'   dev-event=""  dev-action="">2016/2</option> 
            <option value='{"SGLPERIODOLETIVO":"2016\/1","CODPERIODOLETIVO":"2616"}'  id='cmbCodPeriodoLetivo_opt2'   name="cmbCodPeriodoLetivo_opt2"  dev-comp="true"  dev-id='cmbCodPeriodoLetivo_opt2'   dev-event=""  dev-action="">2016/1</option> 
            <option value='{"SGLPERIODOLETIVO":"2015\/2","CODPERIODOLETIVO":"2396"}'  id='cmbCodPeriodoLetivo_opt3'   name="cmbCodPeriodoLetivo_opt3"  dev-comp="true"  dev-id='cmbCodPeriodoLetivo_opt3'   dev-event=""  dev-action="">2015/2</option>     
          </select>
        </fieldset>
      </form>

2 个答案:

答案 0 :(得分:0)

您可以在此处使用Select方法。

Select oSelect = new     Select(driver.findElement(By.id("labelcmbCodPeriodoLetivo")));
oSelect.selectByVisibleText("2016/2");

OR

您可以继续列出下拉列表中的元素

List<WebElement> elem = oSelect.getOptions();
        int iSize = elem.size();
        System.out.println("Size of the list is" +iSize);

        for(int i=0; i <iSize;i++)
        {
            String sValue = oSelect.getOptions().get(i).getText();
            System.out.println(sValue);

            if(sValue.equals("2016/2"))
            {
                System.out.println("Position of the value is" +i);
                oSelect.selectByIndex(i);


                break;
            }
        }

答案 1 :(得分:0)

我使用这段代码在组件中执行某些操作:

  1. 清除字段;
  2. 现场发送密钥;
  3. 点击下拉元素中的第一个结果;
  4. 以下是我的解决方案的源代码:

    driver.FindElement(By.XPath("//form[@id='form-filter']/fieldset[2]/span[2]/input")).Clear();
    driver.FindElement(By.XPath("//form[@id='form-filter']/fieldset[2]/span[2]/input")).SendKeys(Input String);
    driver.FindElement(By.XPath("//body/ul/li/a")).Click();
    

    感谢所有答案。