当当当当当8 2021-06-24 09:50 采纳率: 100%
浏览 49
已采纳

selenium自动化代码写好之后领导觉得重复代码比较多,想把重复的定位元素写在json中读取

selenium自动化代码写好之后领导觉得重复代码比较多,想把重复的定位元素写在json中读取

就是说以前如果三条都是定位的ID元素写在代码中,现在只在代码中写一条,循环读取执行三条代码

再就是如何判断执行click()和sendkeys(),大神们,好几天没睡了,求帮忙,如果谁遇到过类似的帮忙贴一段代码和json文件给点参考思路

from test_case.BaseTestCase import BaseTestCase
import time
import unittest2
from func.csvFileManager2 import reader

class OfficesTeachTest(BaseTestCase):


    def test_jonin(self):
        self.driver.get("http://rst2demo.yueeasy.com/htmp_dev_master/pages/main/login/login.jsp")
        self.driver.find_element_by_id("account").send_keys("jy119113")
        self.driver.find_element_by_id("password").send_keys("123456")
        self.driver.find_element_by_class_name("btn-login").click()



    def test_officesteach(self):

        time.sleep(5)
        self.driver.find_element_by_link_text("入科教育").click()
        self.driver.find_element_by_link_text("组织入科教育").click()
        tables = reader("officesteach_test_cases.csv")
        for row in tables:
            self.driver.find_element_by_xpath('//*[@id="frmEduRecord"]/div[1]/div[5]/div/button[2]').click()
            time.sleep(2)
            # 定位增加的入科日期6
            self.driver.execute_script('document.getElementsByClassName("form-control")[6].removeAttribute("readonly")')
            self.driver.find_elements_by_class_name("form-control")[6].send_keys(row[0])
            # 定位增加的教育日期7
            time.sleep(2)
            self.driver.execute_script('document.getElementsByClassName("form-control")[7].removeAttribute("readonly")')
            self.driver.find_elements_by_class_name("form-control")[7].send_keys(row[1])

            # 教育时间
            time.sleep(2)
            self.driver.execute_script('document.getElementById("eduRecordTime").removeAttribute("readonly")')
            self.driver.find_element_by_id("eduRecordTime").clear()
            self.driver.find_element_by_id("eduRecordTime").send_keys(row[2])
            time.sleep(2)
            self.driver.find_element_by_id("employeeNames").click()
            time.sleep(2)
            self.driver.find_element_by_xpath('//*[@id="emp_table"]/tbody/tr[2]/td[1]/input').click()
            time.sleep(2)
            self.driver.find_element_by_xpath('//*[@id="employee_div"]/div/div[3]/button').click()
            time.sleep(2)
            self.driver.find_element_by_xpath('//*[@id="edu_record_info_form"]/table/tbody/tr[6]/td[2]/input').send_keys(row[3])
            self.driver.find_element_by_name("eduRecord.eduRecordContent").send_keys(row[4])
            time.sleep(2)
            self.driver.find_element_by_name("eduRecord.remark").send_keys(row[5])
            time.sleep(2)
            self.driver.find_element_by_id("info_btn").click()
            time.sleep(2)
        query=self.driver.find_element_by_css_selector(".btn.btn-primary").get_attribute("title")
        self.assertEqual("查询",query)


if __name__ == '__main__':
    unittest2.main()

这代码里不是好多xpath或者id定位么,就是想把这么多采取xpath或者id的写成一条,定位元素和值都写在json中,然后循环读取json来实现ui自动化,天啊我想了两天也没想到怎么做

  • 写回答

3条回答 默认 最新

  • 贰半 2021-06-24 17:59
    关注

    去了解一下PO模式,

    一般是把动作在方法里封装好,

    再元素定位写在yaml文件里,

    然后初始化的时候,读取指定的yaml文件,就可以了,

    你这个写的太冗余了,

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面