Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 切换到帧有时会失败(5次中有4次)。不改变任何代码_Selenium_Frames - Fatal编程技术网

Selenium 切换到帧有时会失败(5次中有4次)。不改变任何代码

Selenium 切换到帧有时会失败(5次中有4次)。不改变任何代码,selenium,frames,Selenium,Frames,错误:主线程中出现异常 org.openqa.selenium.NoSuchElementException:找不到元素 使用xpath==//frame[@name='code\u desc'] 尝试使用等待,而不是使用Thread.sleep。有两种类型-隐式等待和显式等待。你可以从中学到更多 现在,请尝试删除所有Thread.sleep语句,并设置隐式等待驱动程序,然后执行代码: Set<String> windows2 = w.getWindowHandles();

错误:主线程中出现异常 org.openqa.selenium.NoSuchElementException:找不到元素 使用xpath==//frame[@name='code\u desc']

尝试使用等待,而不是使用Thread.sleep。有两种类型-隐式等待和显式等待。你可以从中学到更多

现在,请尝试删除所有Thread.sleep语句,并设置隐式等待驱动程序,然后执行代码:

Set<String> windows2 = w.getWindowHandles();
            System.out.println(windows2.size());
            for(String handles : windows2)
            {
                w.switchTo().window(handles);
            }
            System.out.println("Windows after itteration : "+windows2.size());
            Thread.sleep(2000);
            System.out.println(w.getTitle());
            w.switchTo().frame(w.findElement(By.xpath("//frame[@name='MainFrame1']")));
            w.findElement(By.name("blnggrp")).click();
            w.switchTo().defaultContent();
            Thread.sleep(2000);
            Set<String> windows3 = w.getWindowHandles();
            System.out.println(windows3.size());
            for(String hanldes : windows3)
            {
                w.switchTo().window(hanldes);
            }
            Thread.sleep(2000);
            w.switchTo().frame(w.findElement(By.xpath("//frame[@name='code_desc']")));
            w.findElement(By.name("resulted_cond")).click();
            w.switchTo().defaultContent();

我将使用的解决方案是WebDriver的driver.switchTo.frame方法,但避免使用窗口句柄和w.switchTo.windowhandles的ID组合的索引号;是你错误失败的原因。您可以删除该窗口并选择要使用的窗口

一个数字。通常基于0的索引,但不总是使用IE 名字或名字 身份证件 以前找到的WebElement。 例如:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
正如Jason所建议的,如果您将此与隐式等待相结合,您将获得最佳解决方案

driver.switchTo().frame(driver.findElement(By.name("blnggrp")));

即使我使用隐式等待,它也会抛出这个错误,当我编译脚本5次而代码没有任何更改时,它只执行了一到两次,我不知道为什么其他测试失败。你的代码不工作。TimeSpan类在selenium中不可用。@chienua-我不太熟悉C。但我从文档中获得了该代码。这是你的电话号码。检查你的导入。在上面提到的代码中,它在任何情况下都不适合我。它抛出了一个错误,比如找不到element==nameblnggrp。首先我们应该提到框架名称,bcos my元素blnggrp位于框架名称MainFrame1中。因此,首先我们应该对窗口和框架进行控制,然后对元素进行控制。Rite?我的示例假设blnggrp是要切换到的框架/窗口上的唯一名称元素。如果可以,请使用ID作为标识符。我建议使用blnggrp,正如您的示例代码中所示。
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));