使用 selenium 网络驱动程序从下拉列表中选择值

Selecting value from the Dropdown using selenium web-driver

我对select使用 selenium 从下拉列表中获取其中一个值有一点疑问。当我使用 selenium-IDE 生成代码时,它从下拉列表中为我提供了一组用于 selecting 的代码。 代码如下-->

driver.findElement(By.cssSelector("input.search")).click();
driver.findElement(By.xpath("//table[@id='project-add-table']/tbody/tr[4]/td[3]/div/div[2]/div[3]")).click();
new Select(driver.findElement(By.cssSelector("select"))).selectByVisibleText("Test");

谁能告诉我第二行代码有什么用?点击下拉菜单后为什么我们不能直接select所需的元素?

HTML -->

<td class="environmentTd" required="">
   <div class="ui fluid search dropdown env selection">
      <select>
         <option value="SB">Sandbox</option>
         <option value="DEV">Development</option>
         <option value="QA">Test</option>
         <option value="PROD">Production</option>
         <option value="PP">Pre Production</option>
         <option value="UAT">UAT</option>
         <option value="DR">DR</option>
      </select>
      <i class="dropdown icon"></i><input class="search" autocomplete="off" tabindex="0">
      <div class="text">Sandbox</div>
      <div class="menu transition hidden" tabindex="-1">
         <div class="item active selected" data-value="SB">Sandbox</div>
         <div class="item" data-value="DEV">Development</div>
         <div class="item" data-value="QA">Test</div>
         <div class="item" data-value="PROD">Production</div>
         <div class="item" data-value="PP">Pre Production</div>
         <div class="item" data-value="UAT">UAT</div>
         <div class="item" data-value="DR">DR</div>
      </div>
   </div>
</td>

你真的不需要点击下拉菜单。您需要找到作为 WebElement 的下拉列表,将其转换为 SelectElement 并将其 class 方法用于 select 选项。

我假设,在提供的代码中,您单击下拉菜单,然后单击带有选项的打开字段。但我认为这是很多不必要的动作。除非您有任何由该点击触发的脚本,必须对其进行测试。

如果您的 select 标记在 DOM 中可见,而无需单击下拉菜单,只需使用第三行

Select select = new Select(driver.findElement(By.cssSelector("select")));
select.selectByValue("QA");

否则,单击可能会生成 DIV 和 class

的下拉菜单
class="menu transition hidden"

然后您可以使用 select 行。

根据您的描述,SELECT 元素在第二次点击之前是不可见的。也有可能第二次点击通过 Javascript 创建了 SELECT 元素。您可以使用 Chrome devtools 进行调查,并在第二次点击发生之前搜索 SELECT 元素。查看它是否存在或可能存在但不可见。然后点击第二个元素,看看 HTML 是如何变化的。在无法访问该站点的情况下,这已经是我们所能提供的最好的解释了。这不是我会担心的事情。这就是网站的设计方式。