-1

我有一个应用程序,我尝试在其中单击一个按钮,作为回报,它会弹出一个窗口来填写新的用户表单。这并不像一个弹出窗口,因为它有一些输入字段以及“保存”和“取消”按钮。它看起来类似于 facebook 中的弹出窗口。

这是我尝试使用的代码

Set beforePopup = driver.getWindowHandles();
    driver.findElement(By.xpath("/html/body/div/div/div/div[3]/div/div[2]/div[2]/table/tbody/tr/td[3]/table/tbody/tr/td[2]/em/button")).click();
    driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
    Set afterPopup = driver.getWindowHandles();
    afterPopup.removeAll(beforePopup);
    if(afterPopup.size() == 1) {
          driver.switchTo().window((String)afterPopup.toArray()[0]);
        }

    //driver.switchTo().window("Add New User");
    //selenium.type("userDetailsBean.firstName","alan1");
    //WebElement btnStartQueryInside = driver.findElement(By.xpath("//html/body/div[14]/div/div/div/div/span"));
    //btnStartQueryInside.getText();
    System.out.println(driver.getTitle());
    WebElement firstName = driver.findElement(By.xpath("/html/body/div[2]/div/div/div/div/div/form/div/div/input"));
    firstName.sendKeys("alan1");



    //driver.switchTo().alert();
    //driver.findElement(By.xpath("//html/body/div[14]/div/div/div/div")).getText();
    //WebElement firstName=driver.findElement(By.xpath("/html/body/div[2]/div/div/div/div/div/form/div/div/input"));
    //firstName.sendKeys("alan1");
    /*WebElement lastName=driver.findElement(By.id("userDetailsBean.lastName"));
    lastName.sendKeys("harper");
    WebElement emailadd=driver.findElement(By.id("userDetailsBean.userEmail"));
    emailadd.sendKeys("alan1@derik.com");
    WebElement username=driver.findElement(By.id("userDetailsBean.userName"));
    username.sendKeys("xalan1");
    WebElement password=driver.findElement(By.id("adminPassword"));
    password.sendKeys("Derik123");
    WebElement repassword=driver.findElement(By.id("adminPassword2"));
    repassword.sendKeys("Derik123");
    driver.findElement(By.xpath("//html/body/div[2]/div/div/div/div/div[2]/div/div/table/tbody/tr/td/table/tbody/tr/td[2]/em/button")).click();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);*/

请注意,在代码中我注释了一些输入字段填充,因为我首先认为我会使其仅适用于第一个字段。请帮助我如何进行。

问题是单击弹出按钮后,我不确定控件是否切换到弹出窗口。弹出后的 gettitle 给出主窗口标题。并且无法使用 xpath 或 id 找到第一个输入字段。

4

1 回答 1

2

Selenium 中的术语window是指实际的浏览器窗口,而不是框架或只是 div。因此,您的逻辑是错误的,getWindowHandles()并且driver.switchTo().window("Add New User")不是您所追求的。

你需要的是driver.switchTo().frame().

driver.switchTo().defaultContent(); // optional, use only if driver is already in an iframe

WebElement editUserForm = driver.findElement(By.cssSelector("iframe[src*='editUserForm']"));
// there are other overloads (by frame name, index, id) and locators can be used here.
driver.switchTo().frame(editUserForm);

// make sure your locator here is correct
WebElement lastName = driver.findElement(By.id("userDetailsBean.lastName")); // I doubt this is correct
// from your screenshot, I'd suggest By.cssSelector("[id*='userDetailsBean.lastName'] input")
lastName.sendKeys("harper");

还请注意,您的代码有异味。

  • 您的 implicitlyWait 等待用法似乎错误,请阅读文档帖子

  • 你从哪里得到的selenium.type("userDetailsBean.firstName","alan1");?您只是从其他地方复制该行吗?这在我看来就像 Selenium RC。

  • 为什么driver.switchTo().alert()?您是否阅读过有关此用途的文档
  • 请不要使用绝对 xpath。
  • 如果您在实际项目中没有这样做,请尝试使用页面对象。(如果你只是想在这里说明问题也可以)
于 2013-05-17T22:02:57.107 回答