需要帮助在selenium webdriver中找到新打开的窗口中的文本框

时间:2013-10-03 04:28:20

标签: java selenium

String parentHandle = driver.getWindowHandle();     
driver.findElement(By.id("ImageButton5")).click();
for (String winHandle : driver.getWindowHandles()) {
    driver.switchTo().window(winHandle);                
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);                    
}
driver.findElement(By.id("txtEnterDescription")).sendKeys("Test");
driver.findElement(By.id("chklstAllprocedure_0")).click();

我使用了这段代码,我得到了错误

  

“线程中的异常”主“   org.openqa.selenium.NoSuchElementException:无法找到元素   id == txtEnterDescription(警告:服务器未提供   任何堆栈跟踪信息)命令持续时间或超时:30.05   秒“。此文本框的HTML代码为”“

请帮我解决这个问题

3 个答案:

答案 0 :(得分:2)

你可能只会在两种情况下面对“NoSuchElementException”。

 1.The Element is yet to be Loaded
     - Have an appropriate wait logic here.
 2. You may try to locate the element wrongly .
     - Double Check your Xpath/ID(what ever)
     - Make sure you are in the same frame where the element is present.If not, switch to the frame then.

答案 1 :(得分:0)

确保切换到正确的窗口

原因1:确保切换到正确的窗口

我有一个实用工具方法可以切换到所需的窗口,如下所示

public class Utility 
{
    public static WebDriver getHandleToWindow(String title){

        //parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle.
        WebDriver popup = null;
        Set<String> windowIterator = WebDriverInitialize.getDriver().getWindowHandles();
        System.err.println("No of windows :  " + windowIterator.size());
        for (String s : windowIterator) {
          String windowHandle = s; 
          popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle);
          System.out.println("Window Title : " + popup.getTitle());
          System.out.println("Window Url : " + popup.getCurrentUrl());
          if (popup.getTitle().equals(title) ){
              System.out.println("Selected Window Title : " + popup.getTitle());
              return popup;
          }

        }
                System.out.println("Window Title :" + popup.getTitle());
                System.out.println();
            return popup;
        }
}

一旦窗口的标题作为参数传递,它将带您进入所需的窗口。在你的情况下,你可以做到。

Webdriver childDriver = Utility.getHandleToWindow("titleOfChildWindow");

然后再次使用相同的方法切换到父窗口

Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow");

此方法在处理多个窗口时有效[/ p>]

Resaon 2:等待元素

WebdriverWait wait = new  WebdriverWait(driver,7000);
wait.until(ExpectedConditions.visbilityOfElementLocatedBy(By.name("nameofElement")));

原因3:如果是,则检查元素是否在框架中切换到

之前的框架
driver.switchTo.frame("frameName");

让我们知道它是否有效..

答案 2 :(得分:0)

猜测问题出在您切换到逻辑上。我认为当你切换时它传递的是父代码而不是子代码。对于此场景,创建两个局部变量parent和child。使用迭代器遍历窗口句柄,并将父窗口和子窗口id设置为变量,并将子ID传递给switchTo方法。这应该工作。让我发布。快乐的编码。