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

使用selenium web驱动程序从下拉列表中选择值,selenium,selenium-webdriver,selenium-ide,Selenium,Selenium Webdriver,Selenium Ide,我对使用selenium从下拉列表中选择一个值有点怀疑。当我使用selenium IDE生成代码时,它给了我一组代码供我从下拉列表中选择。 代码如下-> 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

我对使用selenium从下拉列表中选择一个值有点怀疑。当我使用selenium IDE生成代码时,它给了我一组代码供我从下拉列表中选择。 代码如下->

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");
那么,有人能说出第二行代码的用途吗?单击下拉菜单后,为什么我们不能直接选择所需的元素

HTML-> 沙箱 发展 测验 生产 前期制作 UAT 博士 沙箱 沙箱 发展 测验 生产 前期制作 UAT 博士
你真的不需要点击下拉菜单。您需要找到作为WebElement的下拉列表,将其转换为SelectElement并使用其类方法来选择选项


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

如果您的select标记在DOM中可见,而您没有单击下拉列表,请使用第三行

Select select = new Select(driver.findElement(By.cssSelector("select")));
select.selectByValue("QA");
否则,单击下拉列表,它可能会生成带有类的DIV

class="menu transition hidden"

然后您可以使用选择行。

根据您的描述,在第二次单击之前,选择元素似乎不可见。第二次单击也可能通过Javascript创建SELECT元素。您可以使用ChromeDevTools进行调查,并在第二次单击之前搜索SELECT元素。看看它是否存在或可能存在但不可见。然后单击第二个元素,查看HTML是如何变化的。没有访问该网站,这是一个很好的解释,因为我们可以提供。这不是我会担心的事。这就是网站的设计方式。

只有第三行代码就足以从下拉列表中选择值。可能是,前两行与下拉选择无关。它不能单独使用第三行。它给出了例外。它无法找到元素。它在没有第二行代码的情况下工作吗?不。它不能,即使我觉得只有第三行就足以从下拉选择值。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-它确实解决了这些问题。我希望一个直截了当的答案看起来就像第二行代码的使用是。。。点击下拉菜单后,我们无法直接选择所需元素,因为…@JeffC您显然误解了堆栈溢出的工作原理。你的帖子最终进入了低质量帖子队列,我可以选择查看。我最初认为它适合作为评论而不是答案,所以我建议删除它。根据你的评论,我给了它第二次审查,我仍然认为它没有回答这个问题,所以我保留了我的初步审查。我没有读过其他答案,除非它们出现在我的复习队列中,否则我不会读。是否存在不正确和/或不合适的答案?也许吧,但这不是重点。@JeffC如果你看到不正确的答案,就投反对票。如果你对我的推荐不满意,那就把它标出来,让版主看看。事实上,你得到了零投票,OP没有接受,还有两条删除建议,这应该告诉你这篇文章不符合堆栈溢出的标准。我可以补充一下,你应该考虑删除它,并发布一个明确的答案,希望得到良好的接受和接受。