我有一个应用程序,其中我尝试单击按钮,作为回报,它将弹出一个窗口以填充新的用户表单。这不像弹出窗口,因为它有一些输入字段以及“保存”和“取消”按钮。它看起来类似于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找到第一个输入字段。答案 0 :(得分: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");
也只是一个善良的抬头,你的代码闻起来。
您的隐式等待使用似乎有误,请阅读the documentation和the post。
你从哪里得到selenium.type("userDetailsBean.firstName","alan1");
?你刚刚从其他地方复制了这条线吗?这对我来说就像Selenium RC。
driver.switchTo().alert()
?您是否阅读过the documentation这是为了什么?