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代码为”“
请帮我解决这个问题
答案 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方法。这应该工作。让我发布。快乐的编码。