【问题标题】:Selenium not finidng element idSelenium 找不到元素 id
【发布时间】:2015-08-20 15:37:06
【问题描述】:

我刚刚开始使用 selenium 网络驱动程序。我正在尝试使用它登录并导航/抓取。

 public static void main(String[] args) {

    java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
    java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);

    WebDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME);


    driver.get("my_Site_I_Reference");

    @SuppressWarnings("unused")
    WebDriverWait wait = new WebDriverWait(driver, 4000);

    WebElement name = driver.findElement(By.id("LoginUsername"));

    name.sendKeys("exampleName");

    name.submit();

    System.out.println("Page title is: " + driver.getTitle());
    driver.quit();
}

我正在使用上面的代码尝试在用户名字段中输入用户名,但我经常遇到此错误:

“org.openqa.selenium.NoSuchElementException:无法找到 ID 为:LoginUsername 的元素”

我几乎可以肯定该元素称为 LoginUsername 如图所示:

非常感谢任何帮助,谢谢!

【问题讨论】:

  • 使用等待而不是 driver.findElement WebElement name = wait.until(ExpectedCondtions.visibilityOfElementLocated(By.id("LoginUsername"))
  • 帮我一个忙.. 在driver.get() 之后,做一个System.out.println(driver.getTitle()) 我不认为你在你认为的页面上
  • new WebDriverWait(driver, 4000); 这是 4000 秒,顺便说一句。我想你不是这个意思吗? :) WebDriverWait
  • 确保您的元素实际显示。做类似的事情
  • .size 来检查元素是否在你的 DOM 中,然后 .isDisplayed 来确保它确实出现在屏幕上。

标签: java selenium


【解决方案1】:

这仍然是一个猜测,但我怀疑该元素位于 iframe 内。如果是这种情况,请在查找元素之前切换到iframe

driver.switchTo().frame("frame_id_or_name"); 
WebElement name = driver.findElement(By.id("LoginUsername"));

【讨论】:

    【解决方案2】:

    你能详细分享一下HTML代码吗?同时,你也可以尝试一下,把它改成下面,分享一下你看到了什么?

    WebElement name = driver.findElement(By.xpath(“//*[@id="LoginUsername"]”)); 
    

    WebElement name = driver.findElement(By.xpath(“//input[@id="LoginUsername"]”)); 
    

    【讨论】:

      【解决方案3】:

      原来我默认禁用了 Javascript 我通过打印我加载的代码的页面源发现了这一点

      ((HtmlUnitDriver) driver).setJavascriptEnabled(true);
      

      一旦启用 selenium,它的行为就像我预期的那样

      【讨论】:

      • 值得注意的是,默认的 WebDriver 浏览器 HtmlUnit 绝对讨厌 javascript。如果您需要测试更多面向 javascript 的页面/应用程序,您可能应该转而使用带有 ghostdriver 的 phantomjs。您将避免许多由 HtmlUnits 引擎引起的愚蠢错误。
      • 感谢您的评论 :)!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多