Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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和java识别页面中iFrame的数量?_Java_Selenium_Iframe_Selenium Webdriver_Frame - Fatal编程技术网

使用Selenium和java识别页面中iFrame的数量?

使用Selenium和java识别页面中iFrame的数量?,java,selenium,iframe,selenium-webdriver,frame,Java,Selenium,Iframe,Selenium Webdriver,Frame,是否有任何方法可以识别硒中的以下物质 Number of iframes in a page Attributes/Details of the current iframe 为了获取当前帧的详细信息,我建议您使用WebElement对象和switchTo切换到当前帧,然后使用getAttribute UPD 事实上,是的,first将给出当前上下文中iframe的数量。如果您不想递归地执行此操作,但想要一个快速且有效(肮脏)的解决方案,只需获取页面源代码并查找“的所有包含内容,下面是一个示例

是否有任何方法可以识别硒中的以下物质

Number of iframes in a page
Attributes/Details of the current iframe
为了获取当前帧的详细信息,我建议您使用
WebElement
对象和
switchTo
切换到当前帧,然后使用
getAttribute

UPD


事实上,是的,first将给出当前上下文中iframe的数量。如果您不想递归地执行此操作,但想要一个快速且有效(肮脏)的解决方案,只需获取页面源代码并查找
“的所有包含内容,下面是一个示例,说明如何处理此问题:

WebDriver driver = new FirefoxDriver();
driver.get("http://the-internet.herokuapp.com/iframe");

// find all your iframes
List<WebElement> iframes = driver.findElements(By.xpath("//iframe"));
        // print your number of frames
        System.out.println(iframes.size());

        // you can reach each frame on your site
        for (WebElement iframe : iframes) {

            // switch to every frame
            driver.switchTo().frame(iframe);

            // now within the frame you can navigate like you are used to
            System.out.println(driver.findElement(By.id("tinymce")).getText());
        }
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://the-internet.herokuapp.com/iframe");
//找到你所有的Iframe
List-iframes=driver.findelelements(By.xpath(“//iframe”);
//打印您的帧数
System.out.println(iframes.size());
//您可以访问站点上的每一帧
for(WebElement iframe:iframes){
//切换到每帧
驱动程序.切换到().帧(iframe);
//现在,在框架内,您可以像习惯一样导航
System.out.println(driver.findElement(By.id(“tinymce”)).getText();
}

正如其他答案所述,您可以使用以下方法确定当前重点上下文中的帧数

driver.findElements(By.xpath("//iframe")).size();
但是,这不会识别任何属于另一帧的子帧。为此,您需要先切换到该父帧

要检索当前聚焦帧的名称或id等属性,可以使用JavascriptExecutor,如下所示:

String currentFrameName = (String)((JavascriptExecutor) driver).executeScript("return window.frameElement.name");

这是我认为最好的答案。当我使用上面的代码时,我收到了以下错误:“无法读取null的属性‘name’”这里缺少什么吗?当您尝试执行“return window.frameElement.name”?“window.frameElement”时,您是否处于页面的顶层上下文“如果您关注页面的顶级内容,将返回null。谢谢大家!与size()方法一起,使用switchTo()方法导航到帧。起初,我很难用java代码识别当前帧(我想知道是否有)。通过chrome中Inspect元素的帮助,识别了框架名称,现在我能够识别该框架中的元素。
String currentFrameName = (String)((JavascriptExecutor) driver).executeScript("return window.frameElement.name");