• 微信 harris1818,
    备注一下就好。

  • 仅楼主可见
  • 谢谢

  • 仅楼主可见
  • 仅楼主可见
  • 还在招的,欢迎加微信或直接简历发我

  • session 与 cookie 区别 at 2018年08月21日
    • HTTP 是无状态的,因为无状态,当用户登录后,服务端会更新 cookie,这样之后的每次请求会带上 cookie,就能代表这个用户是登录的了。
    1. 可以抓包看一下,登录后,respone header 有一个 set-cookie
    2. 当登录后,手动清除 cookie 后,网站又要你登录了。
    • 这样解决了请求是带状态的,但是因为 cookie 在客户端,不够安全。比如抓包获取到 cookie 后,伪造请求带上 cookie 就可以访问登录后的内容了,于是有了 session。
    1. session 存在服务端,一般与 cookie 一一对应,所以即便客户端伪造了一个 cookie,如果这个 cookie 没有对应的 session,也会判定成没有权限访问。
    2. 早期的时候, session 存在内存里,但是多台服务器间不能共享数据,所以现在常用是用分布式缓存保存 session,如 memcache。
    3. session 由服务端控制,就可以有很多策略,比如同一个用户只能用一个 session,session 有超时时间,过了就要重新生成等。 比如,一般你今天抓包的 cookie,明天伪造一个请求,多半会失败。(看服务器策略)
    • 综上, cookie 的作用主要是让客户端的 HTTP 请求带上状态,session 的作用主要是保证内容安全。
  • find.element_by_xpath 写错了,是 find_element_by_xpath

  • 就是上面的代码

    • driver 默认值设成 None,生成实例的时候,不要传 self 了。
    • setUpClass 中,browserengine 改成 self. browserengine
  • def __init__(self, driver):
            self.driver = driver
    

    既然 driver 是通过 get_browser 设置 driver,可以把初始化的 driver 改一下默认值

    def __init__(self, driver=None):
            self.driver = driver
    
    def setUpClass(self):
        #browserengine = BrowserEngine(self)
        # self 是 单元测试的示例,相当于把 driver 设置成单元测试类的示例了。
        # 改为
        self.browserengine = BrowserEngine()
        self.driver = browserengine.get_browser()
    

    如果不是对 unittest 很熟悉,不建议用 setup 或 init 来初始化,可以在另一个文件中,生成 BrowserEngine 实例,在测试类中 import 这个实例, 简单例子

    # commonTools1
    class BrowserEngine():
        pass
    
    browserengine = BrowserEngine()
    
    # 测试类
    from appProject.commonTools1 import browserengine