Java Selenium处理对象标记内的html元素
我正在努力验证html对象标记中的html元素 下面是我的测试html(Java Selenium处理对象标记内的html元素,java,selenium,Java,Selenium,我正在努力验证html对象标记中的html元素 下面是我的测试html(test1.html) 这是测试1 对于iframe,使用webdriver switchto-frame方法很容易处理,如下例所示 @Test public void testIframe() { try { FirefoxDriver driver = new FirefoxDriver(); driver.get("http://localhost/test1.html")
test1.html
)
这是测试1
对于iframe
,使用webdriver switchto-frame方法很容易处理,如下例所示
@Test
public void testIframe() {
try {
FirefoxDriver driver = new FirefoxDriver();
driver.get("http://localhost/test1.html");
driver.switchTo().frame(0);
Assert.assertTrue(driver.findElement(By.xpath("/html/body/div[1]/div")).getText().equals("THE WORLD'S LARGEST WEB DEVELOPER SITE"));
driver.quit();
} catch (Exception e) {
e.printStackTrace();
}
}
但在对象标记的情况下,切换到
方法不能以相同的方式应用。
我很好奇Selenium提供了这种处理方式
有人有办法解决这个问题吗,或者有什么建议吗?实际上是在我们使用的WebDriver for frame中
driver.switchTo().frame();
对于对象,我们可以直接处理或直接执行操作
例如,从您的代码中,如果我想获取数据属性的值
我曾经
driver.findElement(By.xpath("//object[@id='obj1']")).getAttribute("data")
它将返回值http://www.w3schools.com/
我们可以像处理普通web元素一样处理它,我们不需要使用switchTo()我也遇到了同样的问题,下面的解决方案对我的项目有效:
1.我编写了一个java方法,从源代码的
标记中的数据属性中获取URL。
2.在新选项卡中打开提取的URL并执行所需的测试。
3.切换回主选项卡
这里是我使用的方法,您可以根据自己的要求进行修改:
public void getObjectTagURL(){
try {
String pageSource= driver.getPageSource();
int startIndex =str.indexOf("http://www.myURL");
int endIndex= str.indexOf("</object>");
String url= str.substring(startIndex, endIndex);
} catch (Exception e) {
System.out.println(e);
}
public void getObjectTagURL(){
试一试{
字符串pageSource=driver.getPageSource();
int startIndex=str.indexOf(“http://www.myURL");
int endIndex=str.indexOf(“”);
字符串url=str.substring(startIndex,endIndex);
}捕获(例外e){
系统输出打印ln(e);
}
希望有帮助。我还使用了类似于@Deepak_Mahalingam的东西。万一有人发现他的语法不起作用。我使用chrome并检查代码以获取xpath
link = driver.find_element_by_xpath('//*[@id="gl-consoleTabs-slides"]/div/div/object').get_attribute('data')
您也可以通过以下方式使用SwitchTo api访问对象元素:
driver.SwitchTo().Frame(driver.FindElement(By.TagName("object")));
感谢您的回复。我正在尝试检查由数据属性定义的html元素内部。例如,System.out.println(driver.findElement(by.xpath(“//object[@id='obj1']]/html/body/div[1]/div”))。getText()=>这会引发“无法定位元素异常”@SeonghaHan我猜,你的xpath写错了。你想得到的文本是什么?我试图验证页面中的一些文本,而不是test1.html。Firebug并不代表内部页面的xpath。它只显示对象标记本身。如果google DOM inspector在内部显示完整的html,但没有像我上面提到的那样工作。我猜这不是fro我错了xpath表达式。我怀疑webdriver不支持获取html对象标记所针对的元素。但我希望存在另一种解决方法。对于iframe标记,我可以使用switchTo frame方法执行任何操作。Thanks@SeonghaHan实际上,您使用的xpath格式是错误的“//object[@id='obj1']]/html/body/div[1]/div“