【问题标题】:org.openqa.selenium.NoSuchElementException: Unable to locate element:org.openqa.selenium.NoSuchElementException:无法定位元素:
【发布时间】:2014-12-01 11:35:02
【问题描述】:

代码:

public void Test2() throws Exception{ 
Thread.sleep(5000); 
driver.findElement(By.id("cboMenu")).click(); 
driver.findElement(By.xpath(".//*[@id='cboMenu/option[3]")).click();
}

错误:

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"cboMenu"}
Command duration or timeout: 31 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:03'
System info: host: 'venu-PC', ip: '192.168.1.3', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_51'
Session ID: 0f859bed-35df-4eba-a472-3bc2efec4814
Driver info: org.openqa.selenium.firefox.FirefoxDriver

【问题讨论】:

  • 您要定位哪个元素?你能提供更多细节吗?
  • public void Test2() throws Exception{ Thread.sleep(5000); driver.findElement(By.id("cboMenu")).click(); driver.findElement(By.xpath(".//*[@id='cboMenu/option[3]")).click();
  • 我已经发布了答案,请检查 xpath,如果仍然无法正常工作,那么您能否显示我们试图通过 xpath 检测的元素的 HTML 代码或完整的错误消息
  • 能否请您添加相关的html代码sn-p?

标签: java selenium


【解决方案1】:

请使用显式等待而不是 Thread.sleep(5000),如下例所示。 它将为您提供关于您所经历的更清晰的错误。

public void Test2() throws Exception{ 
    new WebDriverWait(driver, 3).until(ExpectedConditions.visibilityOfElementLocated(By.id("cboMenu")))
    driver.findElement(By.id("cboMenu")).click(); 
    driver.findElement(By.xpath(".//*[@id='cboMenu/option[3]")).click();
}

接下来,验证您的按钮没有出现在不同的 iFrame 中。如果这样做,请将 iFrame 更改为您在其中的元素:

driver.switchTo().frame("IFRAME_ID");

IFRAME_ID 取自 DOM:

<iframe id="IFRAME_ID">    

接下来您可以将visibilityOfElementLocated 更改为presenceOfElementLocated,这将验证一个元素是否存在于 DOM 中,但并不一定意味着该元素是可见的。通过您尝试单击的按钮了解您的 webDriver 是否在正确的范围内可能是一个很好的线索。

附加提示 - 滚动您想要点击的按钮进入视图。这也可能是失败的原因。

//element is WebElement    
(JavascriptExecutor)driver.executeScript("arguments[0].scrollIntoView(true);", element); 

【讨论】:

    【解决方案2】:

    这解决了我的问题:)

    driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
            driver.context("WEBVIEW_com.openstream.cueme.services.workbench");
            Thread.sleep(10000);
            driver.findElementById("userId").sendKeys("sysadmin");
            driver.findElementById("CuemePassword").sendKeys("MMNext13#");
    

    【讨论】:

    • 请添加一些解释,以便于理解。
    • 实际上执行测试时 web 视图还没有准备好。当我把 Thread.sleep(10000);它工作正常。 driver.context("WEBVIEW_com.openstream.cueme.services.workbench");线程.sleep(10000); driver.findElementById("userId").sendKeys("sysadmin"); driver.findElementById("CuemePassword").sendKeys("MMNext13#");自动化以下场景时的一项说明
    • 请使用edit 链接添加附加信息,而不是将其放入评论中。
    【解决方案3】:

    试试下面的代码

    public void Test2() throws Exception{
     Thread.sleep(5000);
     driver.findElement(By.id("cboMenu")).click();
     driver.findElement(By.xpath(".//*[@id='cboMenu']/option[3]")).click();
    

    【讨论】:

    • 你的答案和问题代码有变化吗?
    猜你喜欢
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多