我正在尝试检索JSON元素,问题是在源代码中它不存在,但我可以通过inspect元素找到它。
我试过
C.driver.findElement(By.id("ticket-parsed"))
并通过XPath
C.driver.findElement(By.xpath("//*[@id=\"ticket_parsed\"]"));
我无法找到它。
另外
C.driver.switchTo().frame("html5-frame");
System.out.println(C.driver.findElement(By.id("ticket_parsed")));
C.driver.switchTo().defaultContent();
我得到了
[[ChromeDriver: chrome on XP (1f75e50635f9dd5b9535a149a027a447)] -> id: ticket_parsed]
on
driver.switchTo().frame(0) or driver.switchTo().frame(1)
我知道框架不存在
最后我尝试了
WebElement frame = C.driver.findElement(By.id("html5-frame"));
C.driver.switchTo().frame(frame.getAttribute("ticket_parsed"));
我得到一个空指针异常
以下是来源的图片:
我做错了什么?
答案 0 :(得分:4)
嘛!
元素#ticket-parsed
位于iFrame中。因此,您可以点击它而无需进入iframe。
以下是切换到iFrame的代码,
driver.switchTo().frame("frame_name");
或
driver.switchTo().frame(frame_index);
在您的情况下,
driver.switchTo().frame("html5-frame");
切换到iframe后,您可以使用XPath或CSS单击该元素。
C.driver.findElement(By.id("ticket-parsed"))
注意强>: 完成iframe内部的操作后,必须使用以下命令再次返回主窗口。
driver.switchTo().defaultContent();
答案 1 :(得分:0)
我没有找到我的切除设置的解决方案,但我确实找到了一个正确获取对象的js命令
document.getElementById("html5-frame").contentDocument.getElementById("ticket_parsed")
你可以像这样整合js命令
JavascriptExecutor js=(JavascriptExecutor)driver;
js.executeScript(*yourCommandHere*);
如果你想获得命令的输出,只需在你的命令之前添加单词return(在这种特定情况下它不起作用,但在任何其他情况下它都可以)
*TypeOfData* foo = js.executeScript(return *yourCommandHere*);
最后因为时间有限我不得不使用非正统的方法,比如截取屏幕并比较图像是否完全相同
感谢您的帮助