当前位置: 首页 > 知识库问答 >
问题:

如何使用C#中的Selenium在每次加载页面时从具有动态(变化)Xpath值的列表框中选择下拉项

和选
2023-03-14

对于我在C#中使用selenium进行的自动化测试,我想从type字段(ref attached image)中选择一个下拉列表项(any),但是由于在每次加载页面时动态生成所选元素的ID/XPath,所以当我运行记录的脚本时,所选元素单击失败。

IWebElement selectType =
            driver.FindElement(By.XPath("//select[@name='Entries[db9ef219-0f54-4925-9589-0f39351f44a4].TypeID']"));
        selectType.Click();

下面是页面代码-为每一行加载一个唯一的值(在它的c36582c1-131a-4f6f-8711-390048f5779f下面)生成并存储在类RegEffEntryContainer下,并用于每个列表元素-type/description(例如,id=“entries_C36582C1-131A-4F6F-8711-390048F5779F__typeID”,id=“entries_C36582C1-131A-4F6F-8711-390048F5779F__organisation”)

任何帮助解决这将是高度赞赏-感谢提前!

注意:如果我使用动态XPath使用下面的代码,它将只对第一行起作用,我将无法通过脚本记录任何后续行条目。要求是在点击Save/Submit按钮(上面的屏幕截图中没有显示)之前输入所有3个主菜。

IWebElement selectType = driver.FindElement(By.XPath("//select[contains(@id, '__TypeID')]"));

谢谢@jeffc的建议--按建议添加html代码--我仍然保留了前面提供的代码图像。

<div class="RegEffEntryContainer" xpath="1">
<div class="row">
    <div class="col-11">
      <input type="hidden" name="Entries.index" autocomplete="off" value="21b28f6b-8aaa-4924-815a-1d925585fa36">
      <input data-val="true" data-val-number="The field EntryID must be a number." data-val-required="The EntryID field is required." id="Entries_21b28f6b-8aaa-4924-815a-1d925585fa36__EntryID" name="Entries[21b28f6b-8aaa-4924-815a-1d925585fa36].EntryID" type="hidden" value="391">                
            <div class="row">
                <div class="col-12 col-sm-6 col-lg-3">
                    <div class="field-wrapper">
                       <select class="form-control valid" data-val="true" data-val-number="The field TypeID must be a number." id="Entries_21b28f6b-8aaa-4924-815a-1d925585fa36__TypeID" name="Entries[21b28f6b-8aaa-4924-815a-1d925585fa36].TypeID" required="" aria-describedby="Entries_21b28f6b-8aaa-4924-815a-1d925585fa36__TypeID-error" aria-invalid="false">
                          <option value="">Select type</option>
                          <option value="1">Regulatory Activity</option>
                          <option value="2">Major Project</option>
                          <option value="3">Other Activities</option>
                       </select><span class="asterisk">*</span>
                    </div>
                </div>

共有1个答案

朱兴学
2023-03-14

如果您知道行的精确计数,那么只需使用以下命令

IWebElement firstSelect = driver.FindElement(By.XPath("//select[contains(@id, '__TypeID')][1]")); 
IWebElement secondSelect = driver.FindElement(By.XPath("//select[contains(@id, '__TypeID')][2]"));
IWebElement thirdSelect = driver.FindElement(By.XPath("//select[contains(@id, '__TypeID')][3]"));
 类似资料:
  • 下面给出了一段表示下拉列表的代码。我需要在此下拉列表中选择日期值,由<代码> 以下方法无效 1。)使用“按导入组织选择”选择此值。openqa。硒。支持用户界面。选择 控制台显示: 元素应该是“选择”,但应该是“选项” 2.)首先单击下拉列表以显示要选择的选项,然后单击该选项。 控制台显示: 调试元素缺少可访问的名称:id:类型,标记名:选择,类名:文本输入ng原始ng未触及ng有效ng范围 3.

  • 问题内容: 我无法在下拉列表中选择选项。我认为我需要or ,但是没有这样的选择。 样例代码: “ ffbrowser.select”中的“选择”报告为错误: 错误1’OpenQA.Selenium.IWebDriver’不包含’select’的定义,并且找不到扩展方法’select’接受类型为’OpenQA.Selenium.IWebDriver’的第一个参数(是否缺少using指令或组装参考?)

  • 问题内容: 下面给出的是一段代码,表示下拉列表。我需要在此下拉列表中选择 日期 值,表示为 遵循方法无效。 1.)使用“ 选择” 通过导入 org.openqa.selenium.support.ui.Select* 选择此值 * 控制台显示: 元素应该是“选择”但是“选项” 2.)首先单击下拉菜单以显示要选择的选项,然后单击该选项。 控制台显示: DEBUG元素缺少可访问的名称:id:类型,ta

  • 我想使用硒从选择字段中选择一个选项 HTML格式如下: 我尝试了以下方法: 我收到了这个错误: 硒。常见的例外情况。NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:”//*[@id=“Enable”]/option[value=“0”]}

  • 我是硒的新手,我试图从下拉列表中选择一个选项。下拉列表的超文本标记语言如下: WebElement的是: 我已经尝试了几乎所有的方法,我可以在互联网上找到,但没有任何效果。我试图使用类,包装了,但它抛出了一个异常。 我试图丢失列表中的所有选项,但在这种情况下得到了异常应该有标签,但它有。我需要使用作为findelements的标识符。 请帮我解决这个问题。

  • 我是selenium新手,目前正在开发selenium webdriver,我想从下拉列表中选择一个值。id=periodId,选项很多,我试图选择最后52周。 这是超文本标记语言代码: 请建议我单击下拉列表的一些方法。 我尝试了上面的示例行,但出现了错误,例如元素当前不可见,因此可能无法与命令持续时间或超时交互:32毫秒下拉列表值是jquery multiselect小部件格式。