我正在努力验证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提供了这种处理方式。
有人有想法解决这个问题,或者有任何建议吗?
答案 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")));