找不到页面上的元素driver.findElement(By.id(" Passwd"))

时间:2015-08-19 19:37:23

标签: java selenium testing automation qa

步骤:

  1. 转到gmail.com - 确定
  2. 2.填写有效的电子邮件 - 确定

    3按下一步 - 确定

    id="Passwd" FAIL

    查找元素

    由于有效的输入字段id= "Passwd",测试失败。   但我检查了gmail.com,该字段有id =" Passwd"和     Name="Passwd"。我尝试使用CSS定位器并再次测试失败。

    我试图在点击"下一步"之间留出时间差。并将密码填入现场。没帮助。

    也许是因为当您将电子邮件放入字段并单击"下一步"有一些脚本转移"电子邮件输入表格"到"密码输入表格" 我怎么能解决这个问题?

    import org.junit.After;
    import org.junit.Test;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    
    public class GmailSIgnInTest {
        WebDriver driver = new FirefoxDriver();
        @Test
        public void loginShouldBeSuccessfull() {
            driver.get("http://gmail.com");
           WebElement userNameTextBox = driver.findElement(By.id("Email"));
            userNameTextBox.clear();
            userNameTextBox.sendKeys("MY EMAIL HERE");
            WebElement userNextButtonClick = driver.findElement(By.id("next"));
            userNextButtonClick.click();
    
            WebElement userPasswordTextBox = driver.findElement(By.id("Passwd")); // TEST FAIL
            userPasswordTextBox.clear();
            userPasswordTextBox.sendKeys("MY PASSWORD HERE")
    

5 个答案:

答案 0 :(得分:0)

您可以尝试使用XPath:

WebElement userPasswordTextBox = driver.findElement(By.Xpath("//*[@id="Passwd"]"));

答案 1 :(得分:0)

您需要等到元素出现在页面上。

检查this

    WebDriverWait wait = new WebDriverWait(webDriver, 5);
    By passwordLocator = By.id("Passwd");
    wait.until(ExpectedConditions.elementToBeClickable(passwordLocator));

    WebElement userPasswordTextBox = webDriver.findElement(passwordLocator);
    userPasswordTextBox.clear();
    userPasswordTextBox.sendKeys("MY PASSWORD HERE");

答案 2 :(得分:0)

尝试在调用findElement之前刷新html:

webDriver.switchTo().DefaultContent();

如果它没有帮助尝试: 单击按钮后,您可以访问其他html源和不同的框架 用框架检查元素是否存在,如果框架不同,请尝试:

webDriver.switchTo().frame("<FRAME NAME OR ID>");

答案 3 :(得分:0)

等待元素加载是关键......

试试这个

  1. 等到密码页面上的指定定位器可用。
  2. 按名称或ID查找定位器
  3. WebElement myDynamicElement = (new WebDriverWait(driver, 10)) .until(ExpectedConditions.presenceOfElementLocated(By.name("Passwd")));

    WebElement userPasswordTextBox = driver.findElement(By.name("Passwd"));

        Or
    

    WebElement userPasswordTextBox = driver.findElement(By.id("Passwd"));

    它对我有用。

答案 4 :(得分:0)

尝试使用xPath

WebElement userPasswordTextBox = driver.findElement(By.Xpath("// [@id="Passwd"]"));