我们在使用selenium测试过程中,经常会遇到这样的问题:
1.frame或iframe
<iframe id='frame1' name='frame1'> <input type='btuuton' name = 'btn1' value=''/> <iframe id='frame2' name='frame2'> <input type='btuuton' name = 'btn2' value=''/> </iframe> </iframe>
frame层层切换, 定位button并单击.
driver.switch_to.frame(frame1) driver.switch_to.frame(frame2) driver.find_element_by_name('btn2').click()
切换frame后,如果还想回到外层去操作其它元素, 记得要切回去
driver.switch_to.default_content()
切换frame 四种方法:
driver.switch_to.frame(id) #通过frame id driver.switch_to.frame(name) #通过frame name driver.switch_to.frame(index) #通过frame 索引 从0开始 driver.switch_to.frame(webelement) #定位frame元素
动态frame定位,切换
处理动态的,也就是说没有id没有name或者有也是动态变化的. 这个我们一般是采用webelement定位再切换
这里就要用到xpath的内建方法contains(包含--某属性包含字符串)
iframe = driver.find_element_by_xpath("//iframe[contains(@name,'fra')]") driver.switch_to.frame(iframe)
2.获取页面中table中行数据
思路:
1>先定位到table元素
2>定位table元素下的tr元素
3>定位tr元素下的td元素
table = driver.findElement(By.id("table")) rows = table.findElements(By.tagName("tr")) for row in rows: #控制遍历所有行 cols= row.findElements(By.tagName("td")) for col in cols: #控制遍历当前迭代行下所有列 col.getText()