【问题标题】:Selenium can't find element which is visibleSelenium 找不到可见的元素
【发布时间】:2018-11-16 04:03:23
【问题描述】:

这是我尝试查找所选输入的 HTML

我尝试像这样向这个输入发送key()

String xPath = "//*[@id='id_username']";

WebDriverWait wait = new WebDriverWait(driver, 30);

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xPath))).sendKeys("text");

总是收到此错误org.openqa.selenium.TimeoutException。通常,当元素在设定的时间内不可见时,我会收到此错误。

整个 html 中没有 iframe。

可能是什么原因?

【问题讨论】:

  • 您尝试过 1 秒或 2 秒的睡眠吗?
  • @VinitMehta 在此之前我睡了 5 秒。
  • 检查表单是否位于框架/iframe内
  • 有两个可能的原因。 1)重复的xpath。 2)在输入框中输入文本时可能会打开额外的弹出窗口。
  • 当您在开发者控制台中编写 Xpath 时,存在多少条目?您是否尝试过同时包含存在元素和可见性元素

标签: java selenium


【解决方案1】:

您需要考虑以下几点:

  • 尝试将 xpath 定义为 By 的对象,而不是 String
  • 在您调用 sendKeys() 而不是 ExpectedConditions 方法时向前推进 visibilityOfElementLocated() 使用 elementToBeClickable() 方法。
  • 因为元素是<input>,所以尝试构造一个细粒度的xpath
  • 您的代码块将如下所示:

    By xPath = By.xpath("//form[@action='/accounts/register/']/fieldset[@class='fieldset_main']//input[@id='id_username' and @name='username']");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(xPath)).sendKeys("text");
    

【讨论】:

  • 如果元素不可见,如何点击?顺便说一句,真正的问题是重复的xpath。还有另一个inputid ,但在divdisplay:none 中,所有这些都在我的input 之上。
  • 试一试,让我知道状态
  • 您的代码可以正常工作,因为您确定了在哪段代码中寻找输入,并且没有重复输入。
  • 粗化应该是通过细化的理想方法
猜你喜欢
  • 2021-08-15
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2020-01-17
  • 2021-02-23
  • 1970-01-01
相关资源
最近更新 更多