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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Java Selenium处理对象标记内的html元素_Java_Selenium - Fatal编程技术网

Java Selenium处理对象标记内的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")

我正在努力验证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");

        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/d‌​iv[1]/div“