为什么我的测试抛出异常 - 无法在webdriver中找到元素?

时间:2014-01-08 14:28:09

标签: java firefox selenium selenium-webdriver automated-tests

package testproject;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.*;
  public class mytestclass {
    public static void main(String[] args) {
       WebDriver Driver = new FirefoxDriver();
        Driver.get("https://www.gmail.com/");
         WebElement wb= Driver.findElement(By.name("Email"));
         wb.sendKeys("sweta");
         WebElement wb1= Driver.findElement(By.name("Passwd"));
         wb1.sendKeys("123456");
         WebElement wb2= Driver.findElement(By.id("signIn"));
         wb2.click();
         WebElement wb3= Driver.findElement(By.xpath(".//*[@id='gb']/div[1]/div[1]/div[2]/div[5]/div[1]/a"));
         wb3.click();
         WebElement wb4= Driver.findElement(By.id("gb_71"));
         wb4.click();
   }
}

当我执行此代码时,一切都很顺利,直到我想要点击登录按钮。我得到例外的说法 线程" main"中的例外情况org.openqa.selenium.NoSuchElementException:无法找到元素:{"方法":" xpath","选择器":" .//* [ @id =' gb'] / div [1] / div [1] / div [2] / div [5] / div [1] / a"}但是当我试图找到它使用fierbug工作正常。 在上面提到的代码中,我更改了电子邮件ID和密码以保证电子邮件的安全。

我遇到了另外一个已经在stakwave上发布的程序的问题,所以如果你可以请看一下这个链接 - webdriver is not able to click on a hyperlink in firefox

5 个答案:

答案 0 :(得分:1)

您确定登录后页面已完全加载吗?

您是否为网络驱动程序设置了超时? (等待元素需要多长时间)。可能它会在完成加载之前读取你的html。

Webdriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

Thread.sleep(8000)

后,要快速找出问题是否wb2.click();

答案 1 :(得分:1)

删除xpath表达式开头的点。这样你就有了一个可以匹配所有内容的xpath表达式。使用开头的点,您可以根据当前节点是否是根节点来自行调整。没办法知道它。这个点只会给你带来麻烦。不幸的是,你不能总是相信像firebug这样的工具给你(在99%的情况下仍然如此)。

当然,请确保您定位的elemet已按照上一个答案的建议显示在屏幕上。

答案 2 :(得分:1)

我遇到了类似的问题, 设置超时后问题已解决。

Webdriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

虽然不确定暂停的作用是什么。

答案 3 :(得分:0)

从xpath中删除点(。)和星号(*)并提供正确的标记名称代替星号。

例如,如果@ id = gb是div元素的id,则将div替换为star。 希望它能奏效。

答案 4 :(得分:0)

//launch browser 
FirefoxDriver driver = new FirefoxDriver(options); 
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
//gmail login :
driver.get("http://www.gmail.com");
driver.findElement(By.id("identifierId")).sendKeys("****",Keys.ENTER);
Thread.sleep(5000);
driver.findElement(By.id("password")).sendKeys("***",Keys.ENTER);
//logout:
driver.findElement(By.xpath("//div[@id='gb']/div[1]/div[1]/div[2]/div[4]/div[1]/a/span")).click();
Thread.sleep(5000);
driver.findElement(By.linkText("Sign out")).click();