使用 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 是如何变化的。在无法访问该站点的情况下,这已经是我们所能提供的最好的解释了。这不是我会担心的事情。这就是网站的设计方式。
我对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 是如何变化的。在无法访问该站点的情况下,这已经是我们所能提供的最好的解释了。这不是我会担心的事情。这就是网站的设计方式。