执行我的testscript时出现NoSuchElementException

时间:2017-05-28 12:51:56

标签: selenium selenium-webdriver

执行测试脚本时观察到以下错误。有人可以帮助我找出失败的原因。

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"lid"}
Command duration or timeout: 20.45 seconds

以下是我的代码片段。请注意,元素存在于同一帧中,因此不需要帧切换。

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//import org.openqa.selenium.support.ui.ExpectedConditions;
//import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;

public class LoginPage 
{
    @Test
    public void testLoginFail()
    {
        WebDriver driver = new FirefoxDriver();
        driver.get("https://www.zoho.com/crm/");
        driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
        driver.findElement(By.linkText("LOGIN")).click();
        //WebDriverWait wait = new WebDriverWait(driver,40);
        //wait.until(ExpectedConditions.visibilityOfElementLocated((By.id("lid"))));
        driver.findElement(By.id("lid")).sendKeys("xyz@gmail.com");

元素的HTML视图是:

<input name="lid" id="lid" class="input usrbx" value="" onkeypress="clearmsg()" type="email">

2 个答案:

答案 0 :(得分:0)

我已经检查了网页&#34; https://www.zoho.com/crm/lp/login.html&#34;我能够在其中看到一个iframe,输入文本框在其中。以下是工作代码。

public static void main(String[] args) 
{

    System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\Selenium\\Web Drivers\\chromedriver.exe");
    WebDriver driver=new ChromeDriver();


    driver.get("https://www.zoho.com/crm/");
    driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
    driver.findElement(By.linkText("LOGIN")).click();

    //Switch to the frame
    driver.switchTo().frame(0);
    driver.findElement(By.id("lid")).sendKeys("xyz@gmail.com");
    driver.quit();
}

希望这会对你有所帮助。感谢。

答案 1 :(得分:0)

以下是您的问题的答案:

关于解决方案的几句话:

  1. 与Selenium 3.4.0一起使用geckodriver v0.16.1&amp; Mozilla Firefox 53.0您需要从here下载最新的geckodriver,并通过System.setProperty提供geckodriver的绝对路径。
  2. 尽量避免implicitlyWait根据最近的更新implicitlyWait可能很快就会死亡。
  3. 您看到的错误NoSuchElementException说明了一切。元素的id不可跟踪。
  4. ID为lid的元素位于iframe中,因此您需要先切换到第一帧。
  5. 这是您自己的代码,其中包含一些简单的调整:

    @Test
    public void testLoginFail()
    {
        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        driver.get("https://www.zoho.com/crm/");
        driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
        driver.findElement(By.linkText("LOGIN")).click();
        driver.switchTo().frame("zohoiam");
        driver.findElement(By.xpath("//input[@id='lid']")).sendKeys("xyz@gmail.com");
    
    
    }
    
  6. 如果这回答你的问题,请告诉我。