繁体   English   中英

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

[英]How to select a dynamic ID dropdown list c#

我正在使用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>

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

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

要么

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

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. 清除领域;
  2. SendKey在现场;
  3. 单击下拉元素中的第一个结果;

这是我的解决方案的源代码:

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();

感谢所有的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM