1、本次脚本编写的目的:新建一个实验记录的步骤、步骤内容并提交
2.步骤标题的定位方法照旧:
#步骤标题---目的1的代码
bzbt = self.browser.find_element_by_xpath('//*[@id="pane-step"]/div/section/div[1]/div/div[2]/form/div[1]/div/div/input')
bzbt.click()
time.sleep(2)
bzbt.send_keys('lwy的自动化实验步骤标题:20200902')
time.sleep(3)
3、步骤内容的源代码如下,可以看到元素是嵌套在iframe中的,且iframe的id是动态的。
百度最有价值的参考链接:https://www.jianshu.com/p/5af3974c40c7
根据部分元素属性定位
xpath中提供了三个非常好的方法来为我们定位部分属性值:
- driver.find_element_by_xpath ("//div[contains(@id, ‘btn-attention’)]") ------contains(a, b) 如果a中含有字符串b,则返回true,否则返回false
- driver.find_element_by_xpath ("//div[starts-with(@id, ‘btn-attention’)]") -----starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false
- driver.find_element_by_xpath ("//div[ends-with(@id, ‘btn-attention’)]") ----- ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false
#这个需要结尾是‘btn-attention’
参考上面的经验,总结出目的2的代码如下:
#定位步骤内容的iframe的框架中的元素(先定位到框架)
#iframe的xpath为//*[@id="vue-tinymce-159909748361216_ifr"]
首先需要定位到 iframe 元素,当iframe 的 id是动态时,用(starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false)
iframe = self.browser.switch_to.frame(self.browser.find_element_by_xpath("//iframe[starts-with(@id,'vue-tinymce')]"))----我的代码,通过打印消息发现定位是成功的
#driver.switch_to.frame(driver.find_element_by_xpath("//iframe[starts-with(@id, 'x-URS-iframe')]"))---参考别人的代码
#定位步骤内容的输入框(再定位到元素)

bznr = self.browser.find_element_by_xpath('//*[@id="tinymce"]/p')
time.sleep(3)
bznr.click()
print('lwy1111111111')
time.sleep(2)
#bznr.send_keys('lwy的自动化测试步骤内容是:lwy你真棒')---这一步这样写不知道为什么不行,没找到原因,也不深究了
self.browser.find_element_by_id('tinymce').send_keys('lwy的自动化测试步骤内容是:lwy你真棒')
4、目的3--提交
所以,需要先退出irfame
#退出iframe(因为提交这个按钮的元素已经不在iframe框架中)
exitframe = self.browser.switch_to.default_content()
time.sleep(1)
#提交--目的3完成
submitt1 = self.browser.find_element_by_xpath('//*[@id="pane-step"]/div/section/div[1]/div/div[3]/div/button[2]/span').click()
最终的效果是
真棒,简直是完美!!哈哈