云之高水之远 2020-05-17
selenium iframe 定位
发现NAME属性不能定位,不具有唯一性,有三个NAME值一样的IFRAME。
当时具体情况是:IFRAME有三个属性,NAME,SRC,CLASS。三个IFRAME除了SRC值不一样外,其它两个属性的值都一样。
所以只能通过SRC值来区分IFRAME了。
最后解决是通过:dom=document.querySelector("[src=‘.....‘]") 这个语法定位成功了
举个栗子:
<iframe src="myframetest.html" />
用xpath定位,传入WebElement对象:
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,‘myframe‘)]"))
如:
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@src,‘mail.qq.com‘)][1]")));
//driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@src,‘mail.qq.com&v=110702‘)]")));
多层iframe
driver.switchTo().defaultContent(); driver.switchTo().frame(1); //第一个iframe,没有id/name,可以取下标来定位
driver.switchTo().frame("layui-layer-iframe1"); //第二层iframe
driver.findElement(By.name("opinion")).clear(); //操作第二层iframe下面的元素
driver.findElement(By.name("opinion")).sendKeys("test opinion!");
driver.findElement(By.xpath("//button[@type=‘submit‘]")).click();
sleep(2000); driver.switchTo().defaultContent(); //退出iframe,返回列表操作
driver.switchTo().frame(1); //进入列表那层iframe再进行操作