在框架中,如何使用webdriver查找用户名文本框的xpath

时间:2014-06-09 04:22:47

标签: java xpath selenium-webdriver

我想登录http://www.timesjobs.com/。登录后出现弹出窗口(这是css灯箱)。无法在此登录框中找到用户名的确切xpath。我迭代了每一帧,并尝试使用firefox生成的xpath作为用户名文本框。我得到例外:

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//html/body//input[@name='j_username']"}.

尝试下面的代码,但没有运气:

public static void main(String[] args) throws InterruptedException {
    // TODO Auto-generated method stub
    WebDriver driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(6, TimeUnit.SECONDS);
    driver.get("http://www.timesjobs.com");
    driver.findElement(By.linkText("Sign In")).click();
Thread.sleep(10000L);
    List<WebElement> frames = driver.findElements(By.tagName("iframe"));
    System.out.println("Total Frames: " + frames.size());
    int k =0;
    while(k<=frames.size()){

        try{driver.switchTo().defaultContent();
            driver.switchTo().frame(k);
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            WebElement we1 = driver.findElement(By.xpath("//html/body//input[@name='j_username']"));
            we1.sendKeys("xyzusername@xyzcompany.com");
        System.out.println("in try BLOCK:"+k);
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("in catch: "+k);
        }finally{
            k++;}
    }
    System.out.println("end of the program");
}

1 个答案:

答案 0 :(得分:0)

尝试以下代码。有用。

您的用户名字段包含在GB_Frame中,该字体包含在GB_Frame1中。所以我们必须切换到GB_Frame1然后切换到GB_Frame。用户名字段的格式为name,因此最好使用xpath

public static void main(String[] args) throws InterruptedException {
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.timesjobs.com");
    driver.findElement(By.linkText("Sign In")).click();
    Thread.sleep(10000);
    driver.switchTo().frame("GB_frame1");
    driver.switchTo().frame("GB_frame");

    WebElement we1 = driver.findElement(By.name("j_username"));
    we1.sendKeys("xyzusername@xyzcompany.com");
}

我不明白你在识别帧时遇到了什么困难。页面来源非常清楚。如果这有助于你,请告诉我。