Selenium处理对象标记内的html元素

时间:2015-10-07 18:40:11

标签: java selenium

我正在努力验证html对象标签中的html元素。

以下是我的测试html(ssh user@host -f 'mkdir -p foo/bar' ssh user@host -f 'cd foo/bar ; echo "this is a logfile">logfile.txt' ssh user@host -f 'cd foo/bar ; echo "this is a logfile">logfile.txt' ssh user@host -f 'cd foo/bar ; grep logfile logfile.txt' > locallogfile.txt cat locallogfile.txt )。

test1.html

对于<html> <body> <h1>this is test 1</h1> <object id='obj1' width="100%" height="200px" data="http://www.w3schools.com/"></object> <br> <br> <br> <br> <iframe id='ifr1' width="100%" height="200px" src="http://www.w3schools.com/"></iframe> </body> </html> ,使用webdriver switchto frame方法很容易处理,如下例所示。

iframe

但是在对象标记的情况下,@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提供了这种处理方式。

有人有想法解决这个问题,或者有任何建议吗?

4 个答案:

答案 0 :(得分:1)

实际上在WebDriver for frame中我们使用

driver.switchTo().frame();

我们可以直接处理或直接执行操作的对象

例如来自您的代码,如果我想采用value of data attribute

我用过

driver.findElement(By.xpath("//object[@id='obj1']")).getAttribute("data")

return值为http://www.w3schools.com/

我们可以像普通的网页元素一样处理它,我们不需要使用switchTo()

答案 1 :(得分:1)

我还使用了类似于@Deepak_Mahalingam的东西。万一有人发现他的语法不起作用。我使用chrome并检查代码以获取xpath。

link = driver.find_element_by_xpath('//*[@id="gl-consoleTabs-slides"]/div/div/object').get_attribute('data')

答案 2 :(得分:0)

我遇到了同样的问题,以下解决方案适用于我的项目:

1.我写了一个java方法,从源代码中获取data标签中<Object>属性的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);   
     }

希望它有所帮助。

答案 3 :(得分:0)

您也可以通过以下方式使用SwitchTo api访问对象元素:

driver.SwitchTo().Frame(driver.FindElement(By.TagName("object")));