Java 在iframe中找不到硒元素

Java 在iframe中找不到硒元素,java,selenium,xpath,selenium-webdriver,Java,Selenium,Xpath,Selenium Webdriver,我试图检索一个JSON元素,问题是在源代码中它不存在,但我可以通过inspect元素找到它 我试过了 C.driver.findElement(By.id("ticket-parsed")) 通过XPath C.driver.findElement(By.xpath("//*[@id=\"ticket_parsed\"]")); 我找不到它 也 我明白了 在 我知道这个框架不存在 最后我试了一下 WebElement frame = C.driver.findElement(By.id("

我试图检索一个JSON元素,问题是在源代码中它不存在,但我可以通过inspect元素找到它

我试过了

C.driver.findElement(By.id("ticket-parsed"))
通过XPath

C.driver.findElement(By.xpath("//*[@id=\"ticket_parsed\"]"));
我找不到它

我明白了

我知道这个框架不存在

最后我试了一下

 WebElement frame = C.driver.findElement(By.id("html5-frame"));
 C.driver.switchTo().frame(frame.getAttribute("ticket_parsed"));
我得到一个空指针异常

这是源代码的图像

我做错了什么?

好吧

元素
#已解析的票证
位于iFrame中。因此,您可以单击它而无需进入iframe

以下是切换到iFrame的代码

driver.switchTo().frame("frame_name");


在您的情况下,

driver.switchTo().frame("html5-frame");
切换到iframe后,可以使用XPath或CSS单击该元素

C.driver.findElement(By.id("ticket-parsed"))

注意: 在iframe内部完成操作后,必须使用以下命令再次返回主窗口

driver.switchTo().defaultContent();

元素
#已解析的票证
位于iFrame中。因此,您可以单击它而无需进入iframe

以下是切换到iFrame的代码

driver.switchTo().frame("frame_name");


在您的情况下,

driver.switchTo().frame("html5-frame");
切换到iframe后,可以使用XPath或CSS单击该元素

C.driver.findElement(By.id("ticket-parsed"))

注意: 在iframe内部完成操作后,必须使用以下命令再次返回主窗口

driver.switchTo().defaultContent();

我没有找到一个解决方案,但我找到了一个js命令,可以正确地获取对象

 document.getElementById("html5-frame").contentDocument.getElementById("ticket_parsed")
您可以像这样集成js命令

 JavascriptExecutor js=(JavascriptExecutor)driver;  
 js.executeScript(*yourCommandHere*);
如果您想获得命令的输出,只需在命令之前添加return(在这种特定情况下,它不起作用,但在任何其他情况下都起作用)

最后,由于时间有限,我不得不使用非正统的方法,如截图和比较图像是否完全相同


感谢您的帮助

我没有找到一个解决方案,但是我找到了一个js命令,可以正确获取对象

 document.getElementById("html5-frame").contentDocument.getElementById("ticket_parsed")
您可以像这样集成js命令

 JavascriptExecutor js=(JavascriptExecutor)driver;  
 js.executeScript(*yourCommandHere*);
如果您想获得命令的输出,只需在命令之前添加return(在这种特定情况下,它不起作用,但在任何其他情况下都起作用)

最后,由于时间有限,我不得不使用非正统的方法,如截图和比较图像是否完全相同


感谢您的帮助

“…在源代码中它不存在,但我可以通过inspect元素找到它。”-只有在某些脚本正在生成html标记时才可能这样做。如果是这种情况,您可能需要告诉Selenium在尝试查找该元素之前等待一两秒钟(这样您可以给脚本足够的时间在DOM中创建该元素)。它是否在iFrame中?对于inspect元素代码的问题,请竖起大拇指@fx86fAt最后,我可以通过document.getElementById(“html5框架”).contentDocument.getElementById(“票证解析”);selenium中的等价物是什么?我尝试使用System.out.println(jse.executeScript(“return document.getElementById(\'html5 frame\”)).contentDocument.getElementById(\'ticket\u parsed\”))从js命令获取结果;但它不起作用,结果是[org.openqa.selenium.remote]。RemoteWebElement@d7c5b237->unknown locator]“…在源代码中它不存在,但我可以通过inspect元素找到它。”-只有当某些脚本正在生成html标记时,这才可能。如果是这种情况,您可能需要告诉Selenium在尝试查找该元素之前等待一两秒钟(这样您可以给脚本足够的时间在DOM中创建该元素)。它是否在iFrame中?对于inspect元素代码的问题,请竖起大拇指@fx86fAt最后,我可以通过document.getElementById(“html5框架”).contentDocument.getElementById(“票证解析”);selenium中的等价物是什么?我尝试使用System.out.println(jse.executeScript(“return document.getElementById(\'html5 frame\”)).contentDocument.getElementById(\'ticket\u parsed\”))从js命令获取结果;但它不起作用,结果是[org.openqa.selenium.remote]。RemoteWebElement@d7c5b237->未知定位器]C.driver.switchTo().frame(“html5 frame”);System.out.println(C.driver.findElement(By.id(“票证解析”));C.driver.switchTo().defaultContent();结果是org.openqa.selenium.NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“id”,“选择器”:“票证解析”}尝试使用driver.switchTo().frame(0)或driver.switchTo().frame(1)我尝试了driver.switchTo().frame(0)。。它没有找到任何帧,对于预览解决方案,我添加了更多的时间以防万一,打印值为[[ChromeDriver:chrome on XP(1f75e50635f9dd5b9535a149a027a447)]->id:ticket\u parsed]我尝试过firefox ie和chrome,结果完全相同我想要“ticket\u parsed”的原因是因为我想将它与其他字符串进行比较。请共享几行代码。另外,检查iframe的计数@fx然后浏览这些文档和C.driver.switchTo().frame(“html5框架”);System.out.println(C.driver.findElement(By.id(“票证解析”));C.driver.switchTo().defaultContent();结果是org.openqa.selenium.NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“id”,“选择器”:“票证解析”}尝试使用driver.switchTo().frame(0)或driver.switchTo().frame(1)我尝试了driver.switchTo().frame(0)。。它没有找到任何帧,对于预览解决方案,我添加了更多的时间以防万一,打印值为[[ChromeDriver:chrome on XP(1f75e50635f9dd5b9535a149a027a447)]->id:ticket\u parsed]我尝试过firefox ie和chrome,结果完全相同我想要“ticket\u parsed”的原因是因为我想将它与其他字符串进行比较。请共享几行代码。也,