0
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 代码是“”

请帮我解决这个问题

4

3 回答 3

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.
于 2013-10-03T04:49:25.127 回答
0

猜猜问题出在你切换到逻辑上。我认为当你切换它时,它传递的是父母的代码而不是孩子的代码。对于这种情况,创建两个局部变量 parent 和 child。使用迭代器遍历窗口句柄,并将父窗口 ID 和子窗口 ID 设置为变量,并将子 ID 传递给 switchTo 方法。这应该有效。让我知道。快乐编码。

于 2013-10-03T06:51:13.133 回答
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");

此方法在处理多个窗口时有效

原因2:等待元素

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

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

driver.switchTo.frame("frameName");

让知道它是否有效..

于 2013-10-03T06:47:56.483 回答