【问题标题】:Can't select option in Select with Selenium无法在 Select with Selenium 中选择选项
【发布时间】:2020-01-24 22:24:43
【问题描述】:

当我尝试在 Selenium 的 <select> 中选择一个选项时遇到问题。

Select select = new Select(element);
actions.moveToElement(element);
select.selectByValue("100000");

这只是给了我ElementClickIntercepted。 尝试点击它也会给我ElementClickIntercepted。 尝试用 JS 点击它会给我一个NullPointerException。 我可以使用元素选择器在 Firefox 中轻松选择它,因此选择顶部没有任何东西阻止我单击它。

什么是拦截点击?通常是因为一个元素覆盖了另一个元素,它会在测试结果中告诉我,但这里没有。

<div class="pull-left">
<select name="nb" class="form-control">
<option value="10">10</option><option value="20">20</option><option value="50">50</option><option value="100000">All</option>
</select>
</div>

选择 xPath:

//select[@name="nb"]

它是页面上唯一的选择。

【问题讨论】:

  • 你能添加你的 xpath 和 html 吗?
  • 您唯一需要添加的是webdriverwait,您不会得到该异常
  • @Pratik 我的设置中已经有一个隐式等待,超时时间为 5 秒,这还不够吗?还是 webdriverwait 除了显式等待之外还有其他作用?
  • 您不需要操作行...如果删除该行,您还会收到错误吗?
  • @JeffC 与我没有它的结果相同。我的猜测是因为屏幕底部有一个覆盖菜单栏。目前正在尝试增加窗口大小

标签: java selenium selenium-webdriver


【解决方案1】:

试试这个:

WebDriverWait wait = new WebDriverWait(driver, 40);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//select[@name='nb']")));
Select select = new Select(element);
actions.moveToElement(element);
select.selectByValue("100000");

【讨论】:

  • 等待元素可见不会阻止点击拦截异常。 Selenium 认为它是可见的,因为它是可见的,但问题是一些 HTML 在要单击的元素上方,这就是它抛出的原因。
  • 这个答案是根据我们在问题中的信息。
  • 这真的没有解决我的评论。如果该元素不可见,则将是完全不同的错误消息。
  • 我之前也遇到过这个错误。在添加适当的等待元素可见性后,它得到了解决。可能,您之前没有收到此错误,因此您不会知道它。
  • @DebanjanB 是的...我是新手。我从事自动化编写工作已有 20 多年,在 Selenium 方面拥有超过 5 年的经验。我这样做是为了谋生,并且在过去的 25 年里一直如此。向 OP 扔随机的东西并希望它能解决它不是解决问题的方法。如果添加等待解决了这个问题,那是巧合。如果您了解异常的含义以及引发它的原因,我们就不会进行此讨论。
【解决方案2】:

由于该元素是&lt;select&gt; 元素,理想情况下您需要使用Select 类。要在值为 1000 的选项上调用 click(),您需要为 elementToBeClickable() 诱导 WebDriverWait,您可以使用以下任一 Locator Strategies

  • cssSelector:

    new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("select.form-control[name='nb']")))).selectByValue("100000");
    
  • xpath:

    new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//select[@class='form-control' and @name='nb']")))).selectByValue("100000");
    

【讨论】:

  • 等待元素可点击不会阻止点击拦截异常。 Selenium 认为它是可点击的,因为它是,但问题是某些 HTML 在要点击的元素上方,这就是它抛出的原因。
猜你喜欢
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多