selenium2学习

自动化介绍:UI自动化测试

Selenium简介:测试web应用程序用户界面(ui)的常用框架
pip install selenium==2.53.6

#pip install selenium or pip install-U selenium
#python setup.py install
from selenium import selenium
python -m pydoc -p   #查看帮助文档

配置apache服务器:

将项目放入webapps下
bin目录下startup.bat启动服务器
浏览器输入:localhost:8080/login.jsp 访问,localhost可变本ip地址


操作浏览器:

#打开浏览器:导宝-打开浏览器-获取网址-关闭窗口
from selenium import webdriver #导入包

ie

driver=webdriver.Ie()

谷歌chromedriver

#引入chromedriver.exe
chromedriver = r"C:\Users\11111\AppData\Local\Google\Chrome\Application\chromedriver.exe"
driver=webdriver.Chrome(chromedriver)

火狐FireFox

driver=webdriver.Firefox()

窗口操作

driver.get(r'https://www.baidu.com/') #打开网址
time.sleep(second) #休眠second秒,需要import time包
driver.refresh() #刷新页面
driver.back() #返回上一页
driver.forward() #进入下一页
driver.maxmize_window() #窗口最大
driver.set_window_size(width,hight)  #指定窗口大小
driver.get_screenshot_as_file("path.jpg") #截取全屏定义图片位置&名字
driver.close() #关闭窗口
driver.quit() #关闭窗口,以进程的形式
driver.name    #获取浏览器名称
driver.page_source    #页面源码

加载插件

url=r"C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\sgycpmyp.default"    #找到配置文件路径
profile=webdriver.FirefoxProfile(url)
driver=webdriver.Firefox(profile)

元素的定位:(element单数/elements复数)

element/By定位:

    from selenium.webdriver.common.by import By
        ~  .find_element(self, by=By.ID, value=None)
        ~  .find_element("id","kw")

id定位:

    from selenium import webdriver
        ~  .find_element_by_id(value)

name定位:

    from selenium import webdriver
        ~  .find_element_by_name(value)

class_name定位:

    from selenium import webdriver
        ~  .find_element_by_class_name(value)

css定位:

    from selenium import webdriver
    #代表id属性
    .代表class属性
        ~  .find_element_by_css_selector(value)
    标签
        ~  .find_element_by_css_selector("input")
    父子标签
        ~  .find_element_by_css_selector("input>input")
    标签属性
        ~  .find_element_by_css_selector("[name='kw']")
    标签组合
        ~  .find_element_by_css_selector("input.kw>input>a>tr#su")
    #通过层级关系
        #//form[id='form'']/span/input
    #通过逻辑运算不需要and
        # "input[id='kw'][name='wd']"
        # dri.find_element_by_css_selector("input[id='kw'][name='wd']").send_keys(u"哈哈") 

link_text定位:

    from selenium import webdriver
        ~  .find_element_by_link_text(value)

partial_link_text定位:

    from selenium import webdriver
        ~  .find_element_by_partial_link_text(value)

tag_name定位:

    from selenium import webdriver
        ~  .find_element_by_tag_name(value)

xpath定位:W3C标准,xpath同一级别多个标签从1开始

    from selenium import webdriver
        ~  .find_element_by_xpath(value)
    表达式:
        nodename    选取此节点所有子节点
        /    从根节点选取
        //    从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
        .    选取当前节点
        ..    选取当前节点的父节点
        @    选取属性
    
    
        
            HarryPotter<title>
            <author>JK.Rowling<author>
            <year>2005<year>
            <price>29.99<price>
        </book>
    </bookstore>
    /bookstore/book[1]
    /boolstore/book[last()]
    /bookstore/book[last()-1]
    /bookstore/book[postion()<3]
    driver.current_window_handle()     #获得当前窗口句柄    //title[@lang]
    //title[@lang='eng']
    /bookstore/book[price>35.00]
    /bookstore/book[price>35.00]/title
    标签:#input标签如果只有一个则可以不用[x]
    dri.find_element_by_xpath("/html/body/div/div/div/div/div/form/span/input")
    标签属性:
    dri.find_element_by_xpath("//input[@id='su']")
    超链接:
    dri.find_element_by_xpath("//a[@href='http://home.baidu.com']")
    标签属性组合
    dri.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']") #属性组合的形式
    文本值定位:
    dri.find_element_by_xpath("//a[contains(text(),'新闻')]") #标签之间存在唯一的文本值
    模糊定位:
    dri.find_element_by_xpath("//a[contains(@href,'xueshu')]") #其他属性值过长时,可以使用此方法
    #网页中动态属性的定位
    #start-with()
    dri.find_element_by_xpath("//input[start-with(@name,'ti_trhao')]")
    #end-with()
    dri.find_element_by_xpath("//input[end-with(@name,'ti_trhao')]")
    #contains()
    dri.find_element_by_xpath("//input[contains(@id,'username')]")
    #多标签多属性组合式定位
    dri.find_element_by_xpath("//input[@id='kw1]//input[start-with(@id,'nice')]/div[1]/form[3]")
</code></pre> 
 <hr> 
 <h1>元素的属性值:</h1> 
 <p>元素.get_attribute(属性名) #获取定位到的元素的指定属性值<br> 元素.size #获取输入框尺寸<br> 元素.text #获取百度页面备案信息<br> 元素.tag_name #获取标签名<br> 元素.is_displayed() #返回元素是否可见(true/false)<br> driver.title #当前页面标题<br> driver.current_url #当前页面url</p> 
 <hr> 
 <h1>鼠标事件</h1> 
 <pre><code>from selenium.webdriver.common.action_chains import ActionChains
</code></pre> 
 <p>常用方法:<br> perform() #执行所有actionchains中的行为<br> move_to_element() #鼠标悬停<br> context_click() #右击鼠标<br> double_click() # 双击鼠标<br> drag_and_drop(source,target) #拖动鼠标</p> 
 <h2>鼠标悬停在搜索设置按钮上</h2> 
 <pre><code>    mouse=driver.find_element_by_link_text("设置"')
    ActionChains(driver).move_to_ element(mouse).perform()
</code></pre> 
 <hr> 
 <h1>键盘事件</h1> 
 <pre><code>from selenium.webdriver.common.keys import Keys
</code></pre> 
 <h2>删除/Backspace</h2> 
 <pre><code>send_keys(Keys.BACK_SPACE)
</code></pre> 
 <h2>空格/space</h2> 
 <pre><code>send_keys(Keys.SPACE)
</code></pre> 
 <h2>制表/tab</h2> 
 <pre><code>send_keys(Keys.TAB)
</code></pre> 
 <h2>回退/esc</h2> 
 <pre><code>send_keys(Keys.ESCAPE)
</code></pre> 
 <h2>回车/enter</h2> 
 <pre><code>send_keys(Keys.ENTER)
</code></pre> 
 <h2>全选/ctrl+a</h2> 
 <pre><code>send_keys(Keys.CONTROL,'a')
</code></pre> 
 <h2>复制/ctrl+c</h2> 
 <pre><code>send_keys(Keys.CONTROL,'c')
</code></pre> 
 <h2>剪切/ctrl+x</h2> 
 <pre><code>send_keys(Keys.CONTROL,'x')
</code></pre> 
 <h2>粘贴/ctrl+v</h2> 
 <pre><code>send_keys(Keys.CONTROL,'v')
</code></pre> 
 <h2>键盘F1...F12</h2> 
 <pre><code>send.keys(Keys.F1/F12)
</code></pre> 
 <hr> 
 <h1>等待</h1> 
 <h2>显式等待:</h2> 
 <pre><code>    from selenium.webdriver.support.ui  import WebDriverWait
    from selenium.webdriver.support.ui  import excepted_conditions as EC
    from selenium.webdriver.common.by import By
</code></pre> 
 <h3>判断元素Expected Conditions的使用场景有2种:</h3> 
 <p>直接在断言中使用<br> 与WebDriverWait配合使用,动态等待页面上元素出现或者消失<br> element=WebDriverWait.(driver,timeout,poll_friquency=0.5,ignored_exceptions=None)<br> driver:浏览器驱动<br> timeout=:最长超时时间<br> poll_frequency:检测的间隔<br> ignored_exceptions:超时后的异常信息,默认是NoSuchElementException<br> 方法注释::<br> until(method,message=' '):<br> notuntil(method,message=' '):<br> exception_conditions类方法注释::<br> title_is() #判断当前页面的title是否精确等于预期<br> title_contains() #判断当前页面的title是否包含预期字符串<br> presence_of_ele: ment_located() #判断某个元素是否被加到了dom树里,并不代表该元素一定可见<br> visibility_of_element_located() #判断某个元素是否可见.可见代表元素非隐藏,并且元素的宽和高都不等于0<br> visibility_of() #跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了<br> presence_of_all_elements_located() #判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是'column-md-3',那么只要有1个元素存在,这个方法就返回True<br> text_to_be_present_in_element() # 判断某个元素中的text是否包含了预期的字符串<br> text_to_be_present_in_element_value() # 判断某个元素中的value属性是否包含了预期的字符串<br> frame_to_be_available_and_switch_to_it() # 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False<br> invisibility_of_element_located() # 判断某个元素中是否不存在于dom树或不可见<br> element_to_be_clickable() # 判断某个元素中是否可见并且是enable的,这样的话才叫clickable<br> staleness_of() # 等某个元素从dom树中移除,注意,这个方法也是返回True或False<br> element_to_be_selected() # 判断某个元素是否被选中了,一般用在下拉列表<br> element_selection_state_to_be() # 判断某个元素的选中状态是否符合预期<br> element_located_selection_state_to_be() # 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator<br> alert_is_present() # 判断页面上是否存在alert</p> 
 <h2>隐式等待:</h2> 
 <p>driver.implicitly_wait(seconds)<br> Sleep休眠方法:<br> import time</p> 
 <h3>selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep()):</h3> 
 <p>sleep(): 强制等待,设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 sleep(),进行脚本的执行过程进行休眠。<br> implicitly_wait():隐式等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。<br> WebDriverWait():显示等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为: NoSuchElementException<br> python selenium 显示等待WebDriverWait与条件判断expected_conditions举例:</p> 
 <pre><code>    #coding=utf-8  
    from selenium import webdriver  
    from selenium.webdriver.common.by import By  
    from selenium.webdriver.support import expected_conditions as EC  
    from selenium.webdriver.support.wait import WebDriverWait  

    driver.implicitly_wait(5)  
        '''''隐式等待和显示等待都存在时,超时时间取二者中较大的'''   
    WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))  
        '''''判断title,返回布尔值'''  
  
    WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))  
        '''''判断title,返回布尔值'''  
  
    WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))  
        '''''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''  
  
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))  
        '''''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''  
  
    WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))  
        '''''判断元素是否可见,如果可见就返回这个元素'''  
  
    WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))  
        '''''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''  
  
    WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav')))  
        '''''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''  
  
    WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))  
        '''''判断指定的元素中是否包含了预期的字符串,返回布尔值'''  
    WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))  
        '''''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''  
  
    #WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator))  
        '''''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''  
        #注意这里并没有一个frame可以切换进去 
  WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))  
        '''''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''  
        #注意#swfEveryCookieWrap在此页面中是一个隐藏的元素  
  
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()  
        '''''判断某个元素中是否可见并且是enable的,代表可点击'''  
        driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()  
        #WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()  
  
    #WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'su')))  
        '''''等待某个元素从dom树中移除'''  
        #这里没有找到合适的例子  
  
    WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]")))  
        '''''判断某个元素是否被选中了,一般用在下拉列表'''  
  
    WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]"),True))  
        '''''判断某个元素的选中状态是否符合预期'''  
  
    WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"//*[@id='nr']/option[1]"),True))  
        '''''判断某个元素的选中状态是否符合预期'''  
        driver.find_element_by_xpath(".//*[@id='gxszButton']/a[1]").click()  
  
    instance = WebDriverWait(driver,10).until(EC.alert_is_present())  
        '''''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''  
        print instance.text  
        instance.accept()
</code></pre> 
 <hr> 
 <h1>多表单切换:</h1> 
 <pre><code>location=driver.findelement(locator)
switch_to.frame(id/name/location)
switch_to_frame()
switch_to.parent_content()    #跳出当前一级表单
switch_to.default_content()     #跳回最外面页面
dri.switch_to_default_content()    #跳回当前默认窗口
</code></pre> 
 <hr> 
 <h1>多窗口切换:</h1> 
 <pre><code>driver.window_handles()     #获取打开窗口的句柄
driver.switch_to.window(handle)     #用于切换到相应的窗口
switch_to_window
</code></pre> 
 <hr> 
 <h1>上传文件:</h1> 
 <p>import SendKeys<br> 示例网址:http://www.sahitest.com/demo/php/fileUpload.htm<br> input标签:<br> input输入框:<br> 元素.sendkeys(r"path")<br> input非输入框→input按钮:<br> SendKeys.SendKeys(r"path") # 发送文件地址,在输入法不是系统默认的输入发时候,路径的输入可能在第三方输入法的输入框中<br> time.sleep(1)<br> SendKeys.SendKeys("{ENTER}") # 发送回车键<br> AutoiIt:<br> https://www.autoitscript.com/site/autoit/downloads/<br> AutoiIt window info #识别控件信息<br> Scite script editor #编辑脚本<br> 脚本方法:<br> ControlFocus("title","窗口文本",controlID) #设置输入焦点到指定窗口的某个控件上<br> WinWait("title题","窗口文本",超时时间) #暂停脚本的执行直至指定窗口存在(出现)为止<br> ControlSetText("title","窗口文本",controlID,"新文本") #修改指定控件文本<br> Sleep(延迟)<br> ControlClick("title","窗口文本",控件ID,按钮,点击次数) #向指定控件发送鼠标点击命令<br> tools→go/F5 :执行<br> import os<br> os.system(au3脚本路径)</p> 
 <hr> 
 <h1>文件下载</h1> 
 <h2>FireFox下载:</h2> 
 <p>profile=webdriver.FireFox Profile () #获取 Profile<br> profile.set_preference("属性","值") #设置 Profile 属性<br> 属性:<br> browser.download.dir:指定下载路径<br> browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径<br> browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器<br> browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问<br> eg:<br> profile = webdriver.FirefoxProfile()<br> profile.set_preference('browser.download.dir', 'd:\')<br> profile.set_preference('browser.download.folderList', 2)<br> profile.set_preference('browser.download.manager.showWhenStarting', False)<br> profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')<br> driver = webdriver.Firefox(firefox_profile=profile)</p> 
 <h2>Charm下载:</h2> 
 <p>属性:<br> download.default_directory:设置下载路径<br> profile.default_content_settings.popups:设置为 0 禁止弹出窗口<br> eg:<br> options = webdriver.ChromeOptions()<br> prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\'}<br> options.add_experimental_option('prefs', prefs)<br> driver = webdriver.Chrome(executable_path='D:\chromedriver.exe', chrome_options=options)</p> 
 <hr> 
 <h1>各种框处理:</h1> 
 <h2>下拉框:</h2> 
 <p>Select:<br> from selenium.webdriver.support.ui import Select<br> Select(driver.find_element("key","value")).select_by_index(self,index)<br> .select_by_visible_text(self,text)<br> .select_by_value(self,value)<br> e.g.<br> Select(driver.find_element_by_name("NR")).select_by_index(2)<br> Select(driver.find_element_by_name("NR")).select_by_visible_text("每页显示50条")<br> Select(driver.find_element_by_name("NR")).select_by_value('50')<br> Select类方法:<br> select_by_index() :通过索引定位<br> select_by_value() :通过value值定位<br> select_by_visible_text() :通过文本值定位<br> deselect_all() :取消所有选项<br> deselect_by_index() :取消对应index选项<br> deselect_by_value() :取消对应value选项<br> deselect_by_visible_text() :取消对应文本选项<br> first_selected_option() :返回第一个选项<br> all_selected_options() :返回所有的选项<br> CSS:<br> dri.find_element_by_css_selector("select#nr>option:nth-child(3)").click()<br> dri.find_element_by_css_selector("select#nr>option[@value='30']:nth-child()").click()<br> 定位父元素select(下面语句中的id=aaa),然后通过tag name找到所有option,得到option元素的数组,然后通过数组索引([1])定位,最后click:<br> driver.find_element_by_id("aaa").find_elements_by_tag_name("option")[1].click()<br> 跟第1条差不多思想,不过用option元素的value属性来定位了,下面代码是通过xpath来写的,可以换成 by_css:<br> driver.find_element_by_xpath("//select[@id='aaa']").find_element_by_xpath("//option[@value='5PM']").click()</p> 
 <h2>弹框(警告框处理):</h2> 
 <p>switch_to.alert()<br> switch_to_alert() #定位到弹框<br> text #获取弹框文本<br> accept() #接受/确定弹框<br> dismiss() #解散/关闭弹框<br> send_keys(value) #发送文本至弹框<br> eg:<br> dt=driver.switch_to_alert() / dt=driver.switch_to.alert()<br> dt.accept()</p> 
 <h2>复选框:</h2> 
 <p>driver.find_element_by_css_selector("span#li>input:nth-child(2)").click()<br> .pop().click() #最后一个点击<br> .pop(-1):默认获取一组元素的最后一个<br> .pop(0):默认获取一组元素的第一个<br> .pop(1):默认获取一组元素的第二个<br> list=dri.find_elements_by_xpath("//*[@type='checkbox']") #获取所有框<br> print list<br> for x in list:<br> if x.get_attribute("value")=="lan": #选择符合条件的框<br> x.click()<br> dri.find_element_by_css_selector("span#li>input:nth-child(2)").is_selected() #是否被选</p> 
 <hr> 
 <h1>抓捕异常:</h1> 
 <pre><code>from selenium.common.exceptions import *
try:
    ...
except Exception,e:
    ...
else:
    ...
(finally:)
    ...
</code></pre> 
 <hr> 
 <h1>JS定位:</h1> 
 <pre><code>document.getElementById("id")
document.getElementsByName("name")[0].value="test"      返回列表,如果只有一个取下标0
document.getElementsByTagName("tag")
document.getElementsByClassName("class")
document.querySelectorAll()
eg:
jsusename='document.getElementById("account").clear()'
dri.execute_script(jsusename)
jspassword='document.getElementById("account").value="admin"'
dri.execute_script(jspassword)
</code></pre> 
 <h2>JS日期:</h2> 
 <pre><code>#移除属性
js='document.getElementById("train_date").removeAttribute("readonly");'
dri.execute_script(js)
#jQuery方法移除属性
# js="$('input[id=train_date]').removeAttr('readonly')"     #1移除属性
# js="$('input[id=train_date]').Attr('readonly',false)"     #2设置为false
# js="$('input[id=train_date]').removeAttr('readonly','')"     #3设置为空,同2
#用js方法输入日期
time.sleep(5)
jsdate='document.getElementById("train_date").value="2018-05-01"'
dri.execute_script(jsdate)
</code></pre> 
 <hr> 
 <h1>单元测试:</h1> 
 <pre><code>#test方法必须 要以test开头
import unittest
class IntegerArithmeticTestCase(unittest.TestCase):
    def setUp(self):
        self.dri = webdriver.Firefox()
        self.dri.get(r"https://www.baidu.com/")
        time.sleep(3)
    def tearDown(self):
        time.sleep(3)
        self.dri.close()
    def testlogin(self):
        self.dri=webdriver.Firefox()
        self.dri.get(r"https://www.baidu.com/")
        self.dri.find_element_by_id("kw").send_keys("test")
        time.sleep(3)
        self.dri.find_element_by_id("su").click()
        time.sleep(3)
        titles=self.dri.title
        self.assertEqual(titles,u"test_百度搜索")

if __name__=='__main__':
    unittest.main()
</code></pre> 
 <p>① setup():每个测试函数运行前运行<br> ② teardown():每个测试函数运行完后执行<br> ③ setUpClass():必须使用@classmethod装饰器,所有test运行前运行一次<br> ④ tearDownClass():必须使用@classmethod装饰器,所有test运行完后运行一次</p> 
 <h2>单元测试用例:</h2> 
 <pre><code>import unittest
import HTMLTestRunner
class Reports(unittest.TestCase):
    def testpanduan01(self):
        self.assertEqual(1,6)
    def testpanduan02(self):
        self.assertIn("aaa","aaaaabbbbbccccdddd")
if __name__=="__main__":
    # 指定执行测试用例
    testunit=unittest.TestSuite()
    testunit.addTest(Reports("testpanduan01"))
    testunit.addTest(Reports("testpanduan02"))
    #增加时间
    now=timereport=time.strftime("%Y%m%d%S%M%S")
    uu="panduanReport.html"
    print timereport+uu
    # fp=open(now+"panduanReport.html","w")
    # 写测试报告
    fp=open("panduanReport"+now+".html","w")
    runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"测试报告书",description=u"这是测试报告的描述")
    runner.run(testunit)
</code></pre> 
 <p>断言语法 解释<br> assertEqual(a, b) 判断a==b<br> assertNotEqual(a, b) 判断a!=b<br> assertTrue(x) bool(x) is True<br> assertFalse(x) bool(x) is False<br> assertIs(a, b) a is b<br> assertIsNot(a, b) a is not b<br> assertIsNone(x) x is None<br> assertIsNotNone(x) x is not None<br> assertIn(a, b) a in b<br> assertNotIn(a, b) a not in b<br> assertIsInstance(a, b) isinstance(a, b)<br> assertNotIsInstance(a, b)</p> 
 <h2>单元测试修饰器:</h2> 
 <pre><code>class login(unittest.TestCase):
#setup().teardowm()每个用例都执行,+class后添加修饰器@classmethod...之开始结束执行一次
    # def setUp(self):
    @classmethod
    def setUpClass(cls):
        cls.dri=webdriver.Firefox()
        cls.dri.get(r"https://www.baidu.com/")
        print "start*******************"
    # def tearDown(self):
    @classmethod
    def tearDownClass(cls):
        cls.dri.close()
        print "%%%%%%%%%%%%%%%%%%%%%end"
    @unittest.skip("msg") #跳过测试用例
    def test001(self):
        print "this is num1"
    def test002(self):
        print "this is num2"
#test用例执行顺序.根据ASCLL
#   0-9  A-Z    a-z
</code></pre> 
 <h2>等待:</h2> 
 <pre><code>from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
</code></pre> 
 <hr> 
 <h1>操作excel:</h1> 
 <p>import xlrd</p> 
 <h2>打开excel文件</h2> 
 <p>data=xlrd.open_workbook("test.xlsx")</p> 
 <h2>获取指定sheet</h2> 
 <p>table=data.sheets()[0]<br> table=data.sheet_by_index(0)<br> table=data.sheet_by_name("Sheet1")</p> 
 <h2>row行 col列</h2> 
 <h3>行数a</h3> 
 <p>a=table.nrows</p> 
 <h3>列数b</h3> 
 <p>b=table.ncols</p> 
 <h3>第一行的值</h3> 
 <p>table.row_values(0)</p> 
 <h3>第一列的值</h3> 
 <p>table.col_values(0)</p> 
 <h2>python读取Excel实例</h2> 
 <p>(1)安装python官方Excel库-->xlrd<br> (2)获取Excel文件位置并读取<br> (3)读取sheet<br> (4)读取指定rows和cols内容</p> 
 <h2>DDt:</h2> 
 <p>import ddt<br> data=[存放字典数据n对]<br> 类名前用修饰器@ddt.ddt<br> class Ddtdemo(unittest.TestCase):<br> 测试用例test<em>前用修饰器@ddt.data(</em>data) *data 表示传入所有的数据<br> def testdemo(self,data):</p> 
 <h2>data从excel读取数据文件:</h2> 
 <p>data1=filesname.classname("init参数文件") init参数文件是读取文件方法类的传入参数<br> data=filesname.classname.waysname(data1)</p> 
 <p>range() 函数可创建一个整数列表,一般用在 for 循环中<br> range(start, stop[, step])<br> start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);<br> stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5<br> step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)</p> 
 <h2>python的ConfigParser模块:</h2> 
 <p>该模块的作用 就是使用模块中的RawConfigParser()、ConfigParser()、 SafeConfigParser()这三个方法(三者择其一),创建一个对象使用对象的方法对指定的配置文件做增删改查 操作。<br> 在调用这三个函数时,切记这三个函数会将调用optionxform(),在传递键值对数据时,会将键名 全部转化为小写:<br> RawConfigParser():<br> ConfigParser.RawConfigParser([defaults[, dict_type[, allow_no_value]]])<br> defaults : 如果指定默认值,则使用默认值的键值对<br> dict_type:使用新的section的键值对<br> allow_no_value :默认是False,如果是True,表示可以接收空值(None)<br> return:对象<br> ConfigParser():<br> ConfigParser.ConfigParser([defaults[, dict_type[, allow_no_value]]])<br> SafeConfigParser():<br> ConfigParser.SafeConfigParser([defaults[, dict_type[, allow_no_value]]])</p> 
 <h2>Python os.path 模块介绍:</h2> 
 <p>os.path.abspath(path) 返回path规范化的绝对路径(但这个路径不一定是真实的路径),如果path仅是一个文件名,使用该函数后返回的路径是当前工作目录路径连接改文件名后所组成的新的路径名。<br> os.path.split(path) 将path分割成目录和文件名二元组返回<br> os.path.dirname(path) 返回path的目录,其实就是os.path.split(path)的第一个元素<br> os.path.basename(path) 返回path最后的文件名。如果path以/或\结尾,就会返回空值。即os.path.split(path)的第二个元素。<br> os.path.commonprefix(list) 返回list中所有path共有的最长的路径,从左向右,相同字符。<br> os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False。<br> os.path.isabs(path) 如果path是绝对路径,返回True。<br> os.path.normpath(path) 规范path字符串形式(规范文件路径)<br> os.path.isfile(path) 判断路径是否为文件,是返回True,否则返回False<br> os.path.isdir(path) 如果path是一个存在的目录,返回True,否则返货False。<br> os.path.islink(path) 是否是链接;但如果系统不支持链接,则返回False。<br> os.path.join(path1 [, path2 [, ….]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略。<br> os.path.normcase(path) 在Linux下,该函数会原样返回path,在Windows平台上会将路径中所有的字符转换为小写,并将所有斜杠转换为反斜杠,同时将路径规范化。<br> os.path.splitdrive(path) 拆分驱动器和路劲,主要对win,对Linux元组第一个总是空的。<br> os.path.splitext(path) 分离文件名与扩展名;默认返回(fname, fextension)元组,可做分片操作,以” . “为分隔符。<br> os.path.getsize(filename) 返回文件的大小(单位字节),如果filename为目录返回0L<br> os.path.getatime(filename) 返回文件或目录的最后存取时间。<br> os.path.getctime(filename)返回浮点数的文件或目录的创建时间,在类Unix系统上是文件最近更改的时间,在Windows上是文件或目录的创建时间。<br> os.path.getmtime(filename) 返回文件或目录的最后修改时间<br> os.path.walk(top, func, arg):列出目录树下的目录路径和文件路劲<br> 参数说明:<br> top:表示需要遍历的目录树的路径<br> func:表示回调函数,对遍历路径进行处理。所谓回调函数,是作为某个函数的的参数使用,当某个时间触发时,程序将调用定义好的回调函数处理某个任务。回调函数必须提供3个参数:第1个参数为walk()的参数tag,第2个参数表示目录列表,第3个参数表示文件列表。<br> arg:是传递给回调参数func的元组.回调函数的一个参数必须是arg,为回调函数提供处理参数.参数arg可以为空。</p> 
 <hr> 
 <h1>编码格式:</h1> 
 <p>unicodeתutf-8:<br> import sys<br> reload(sys)<br> sys.setdefaultencoding('utf-8')</p> 
 <hr> 
 <h1>封装包的定义:</h1> 
 <p>封装:<br> common:基础方法<br> case:测试用例<br> page:配置,查找定位页面元素<br> exec.py顶层文件作为main函数,执行所有的测试用例<br> 我的定义:<br> page:页面定位元素,文本,弹框,文本值<br> case:测试用例<br> common:继承page类后的测试用例方法<br> source:资源配置设置与读取</p> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1382472239357710336"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(selenium2学习)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1950233199242178560.htm"
                           title="x86-64汇编语言训练程序与实战" target="_blank">x86-64汇编语言训练程序与实战</a>
                        <span class="text-muted">十除以十等于一</span>

                        <div>本文还有配套的精品资源,点击获取简介:汇编语言是一种低级语言,与机器代码紧密相关,特别适用于编写系统级代码及性能要求高的应用。nasm编译器是针对x86和x86-64架构的汇编语言编译器,支持多种语法风格和指令集。项目Euler提供数学和计算机科学问题,鼓励编程技巧应用,前100个问题的答案可共享。x86-64架构扩展了寄存器数量并引入新指令,提升了数据处理效率。学习汇编语言能够深入理解计算机底层</div>
                    </li>
                    <li><a href="/article/1950233072825856000.htm"
                           title="三菱PLC全套学习资料及应用手册" target="_blank">三菱PLC全套学习资料及应用手册</a>
                        <span class="text-muted">good2know</span>

                        <div>本文还有配套的精品资源,点击获取简介:三菱PLC作为工业自动化领域的核心设备,其系列产品的学习和应用需要全面深入的知识。本次资料包为学习者提供从基础到进阶的全方位学习资源,包括各种型号PLC的操作手册、编程指南、软件操作教程以及实际案例分析,旨在帮助用户系统掌握PLC的编程语言、指令系统及在各类工业应用中的实施。1.三菱PLC基础知识入门1.1PLC的基本概念可编程逻辑控制器(PLC)是工业自动化</div>
                    </li>
                    <li><a href="/article/1950232782412247040.htm"
                           title="日更006 终极训练营day3" target="_blank">日更006 终极训练营day3</a>
                        <span class="text-muted">懒cici</span>

                        <div>人生创业课(2)今天的主题:学习方法一:遇到有用的书,反复读,然后结合自身实际,列践行清单,不要再写读书笔记思考这本书与我有什么关系,我在哪些地方能用到,之后我该怎么用方法二:读完书没映像怎么办?训练你的大脑,方法:每读完一遍书,立马合上书,做一场分享,几分钟都行对自己的学习要求太低,要逼自己方法三:学习深度不够怎么办?找到细分领域的榜样,把他们的文章、书籍、产品都体验一遍,成为他们的超级用户,向</div>
                    </li>
                    <li><a href="/article/1950232190038110208.htm"
                           title="day15|前端框架学习和算法" target="_blank">day15|前端框架学习和算法</a>
                        <span class="text-muted">universe_01</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的</div>
                    </li>
                    <li><a href="/article/1950231381485350912.htm"
                           title="《极简思维》第三部分" target="_blank">《极简思维》第三部分</a>
                        <span class="text-muted">小洋苏兮</span>

                        <div>整理你的人际关系如何改善人际关系?摘录:因为人际关系问题是人们生活中不快乐的主要原因。感想:感觉这个说的挺对,之前我总是埋头学习,不管舍友不管自己的合作伙伴的一些事情,但实际上,这学期关注了之后好多了摘录:“亲密关系与社交会让你健康而快乐。这是基础。太过于关注成就或不太关心人际关系的人都不怎么快乐。基本上来说,人类就是建立在人脉关系上的。”感想:但是如果有时想的太多就不太好,要以一个开放的心态跟别</div>
                    </li>
                    <li><a href="/article/1950230873060208640.htm"
                           title="你要记住,最重要的是:随时做好准备,为了你可能成为更好的自己,放弃现在的自己。" target="_blank">你要记住,最重要的是:随时做好准备,为了你可能成为更好的自己,放弃现在的自己。</a>
                        <span class="text-muted">霖霖z</span>

                        <div>打卡人:周云日期:2018年11月09日【日精进打卡第180天】【知~学习】《六项精进》0遍共214遍《通篇》1遍共106遍《大学》2遍共347遍《坚强工作,温柔生活》ok《不抱怨的世界》104-108页《经典名句》你要记住,最重要的是:随时做好准备,为了你可能成为更好的自己,放弃现在的自己。【行~实践】一、修身:(对自己个人)1、坚持打卡二、齐家:(对家庭和家人)打扫卫生,接送孩子,洗衣做饭,陪</div>
                    </li>
                    <li><a href="/article/1950229986984128512.htm"
                           title="贫穷家庭的孩子考上985以后会怎样?" target="_blank">贫穷家庭的孩子考上985以后会怎样?</a>
                        <span class="text-muted">Mellisa蜜思言</span>

                        <div>我出生在一个贫穷的农村家庭,据我妈说,我出生的时候才4斤多,而她生完我以后月子里就瘦到70斤。家里一直很穷,父母都是在菜市场卖菜的,家里还有几亩地种庄稼的。我很小开始就要去帮忙,暑假的生活就是帮忙去卖菜和割稻谷,那时候自己对于割稻谷这种事情有着莫名的恐惧,生怕自己长大以后还是每年都要过着割稻谷这种日子。父母因为忙于生计无暇顾及我的学习,幸好我因为看到他们这样子的生活,内心里有深深的恐惧感,驱使着我</div>
                    </li>
                    <li><a href="/article/1950227573938122752.htm"
                           title="2019-06-05" target="_blank">2019-06-05</a>
                        <span class="text-muted">第十七把巴鲁克</span>

                        <div>今天去实验田里实习,见到了福寿螺真的可怕且牛皮,六级也快来了,说实话还是害怕。我昨天考了环工原理,真的太难了,太烦了,理工科真的难,烦。实验报告还是没写,要抓紧速度抓紧时间,还是应该学会努力学习,远离一些不上进的事物。</div>
                    </li>
                    <li><a href="/article/1950223878005518336.htm"
                           title="为什么焦虑、抑郁、自残的青少年越来越多?" target="_blank">为什么焦虑、抑郁、自残的青少年越来越多?</a>
                        <span class="text-muted">精神健康</span>

                        <div>很多家长觉得没缺孩子吃的穿的,他们有安稳的生活,他们有什么可焦虑、抑郁的,但现在的孩子,学习压力越来越大,每天休息的时间越来越少,出现焦虑抑郁是很正常的。从发展的角度看,青少年时期,人的身体、情绪,智力、人格都急剧发展,正从未成熟走向成熟,情绪起伏不定,易冲动,再者,由于缺乏生活经验,以及来自于家长、学校、社会的各种要求和压力,从而不知所措,心中的焦虑、恐惧、彷徨得不到及时的排解,从而导致心理上的</div>
                    </li>
                    <li><a href="/article/1950222857124507648.htm"
                           title="读书打卡《别想太多啦》" target="_blank">读书打卡《别想太多啦》</a>
                        <span class="text-muted">chenchen_68ed</span>

                        <div>第一,世间之事,不去尝试永远不知道其中的奥秘,在尝试中有失败是必然的。如果担心失败,那什么都学不会。第二,经历的失败越多,越会对失败者抱有宽容的态度,“原来如此,我也经历过类似的失败啦,那只是暂时的”。经历越多失败的长者,越能包容别人,这也就是所谓的“越年长越宽容”。成熟的人,就是在众多失败经历中不断学习,并接纳别人的失败。对于他人的小小过失不吹毛求疵,自己的心态会更加平和。在不断失败中学习,让自</div>
                    </li>
                    <li><a href="/article/1950222602781913088.htm"
                           title="2023-01-26" target="_blank">2023-01-26</a>
                        <span class="text-muted">胡喜平</span>

                        <div>我觉得《可见的学习》一书确实从底层逻辑说清楚了,教学的本质。可是太多术语和概念,一时间难以消化啊。而且知道和懂得有距离,运用就更不行了,需要高手和专家的指导。我需要多听听新课标的讲座了,来反复印证。读论文也有了一点点灵感,明天修改我的论文。</div>
                    </li>
                    <li><a href="/article/1950221204333850624.htm"
                           title="平静得接受自己的笨拙 20190118 晨间日记" target="_blank">平静得接受自己的笨拙 20190118 晨间日记</a>
                        <span class="text-muted">吴伯符</span>

                        <div>图片发自App最近做了一个关于微习惯的分享,这里有八个字:微量开始,超额完成。这里的言下之意其实是要你在一开始的时候,平静地接受自己的笨拙。接受自己的笨拙,理解自己的笨拙,放慢速度尝试,观察哪里可以改进,再反复练习,观察自己哪里可以再进一步改进,再反复…这是学习一切技能的必须的过程。这里的两个关键点是:1.尽快的开始这个过程,这就能够用到微习惯的微量开始。2.尽快的度过这个过程,这就需要用到超额完</div>
                    </li>
                    <li><a href="/article/1950219924043526144.htm"
                           title="二十四节气组诗 谷雨" target="_blank">二十四节气组诗 谷雨</a>
                        <span class="text-muted">离陌_6639</span>

                        <div>图片来源网络,若侵犯了你的权益,请联系我删除6.谷雨文/离陌背上行囊背上如行囊的我从此任行程马不停蹄今天家乡的田野春雨快马加鞭播下希望的种子观音不语目送着我和夏天一道在观音山出关图片来源网络,若侵犯了你的权益,请联系我删除你好啊,我是离陌,已然在懵懂中走过了16年的岁月,为了珍惜当下的每一秒,所以立志做一名终身学习者。文学对于我来说是一种信仰,诗歌是我的生命。人生之道,四通八达,即入文学,自当持之</div>
                    </li>
                    <li><a href="/article/1950219036667211776.htm"
                           title="你好,2020年" target="_blank">你好,2020年</a>
                        <span class="text-muted">瑄瑄妍妍的妈咪</span>

                        <div>早上好,今天是2020年的第一天,也就是元旦,新年新的一天开始了。新的开始,重新规划未来的一年。从今天开始,用了一个新的记账软件,之前的随手记软件,也没有删除,只是重新下载了一个别的软件,开始一个新的记账旅程,对于理财开支,有个新的规划。通过小红书视频软件,学习了不少育儿知识,和各种不同的美食,以后动手制作,给宝宝做健康美味的营养餐。学习方面,继续学英语吧!虽然是抽出时间学的,进度也比较慢,但是积</div>
                    </li>
                    <li><a href="/article/1950216170401492992.htm"
                           title="常规笔记本和加固笔记本的区别" target="_blank">常规笔记本和加固笔记本的区别</a>
                        <span class="text-muted">luchengtech</span>
<a class="tag" taget="_blank" href="/search/%E7%94%B5%E8%84%91/1.htm">电脑</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E9%98%B2%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">三防笔记本</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">加固计算机</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">加固笔记本</a>
                        <div>在现代科技产品中,笔记本电脑因其便携性和功能性被广泛应用。根据使用场景和需求的不同,笔记本可分为常规笔记本和加固笔记本,二者在多个方面存在显著区别。适用场景是区分二者的重要标志。常规笔记本主要面向普通消费者和办公人群,适用于家庭娱乐、日常办公、学生学习等相对稳定的室内环境。比如,人们在家用它追剧、处理文档,学生在教室用它完成作业。而加固笔记本则专为特殊行业设计,像军事、野外勘探、工业制造、交通运输</div>
                    </li>
                    <li><a href="/article/1950215728720310272.htm"
                           title="《云襄传》:云襄做的局是浑水摸鱼吗?" target="_blank">《云襄传》:云襄做的局是浑水摸鱼吗?</a>
                        <span class="text-muted">书生号贺</span>

                        <div>云襄入南都是要浑水摸鱼吗?他是云台的高材生吗?他为啥笃定师父一定会让他留在南都?他为啥觉得他能够做局成功?他是在经商吗?还是在经营人心与欲望?云襄是云台弟子,云台属千门的一支,另一支叫凌渊,云台教人经商之道,重智慧,凌渊以武力取胜,但倍受打压。云襄学习十五年,下高山奔越州,途经南洋,因恩人闻聪被害,囚于白驹镇,念于情分,被卷入这样一个局面里,结识了舒亚南与金十两,于是,复仇小组成立,目标是南都漕帮</div>
                    </li>
                    <li><a href="/article/1950214458265628672.htm"
                           title="心力践行营十二期一阶学习打卡" target="_blank">心力践行营十二期一阶学习打卡</a>
                        <span class="text-muted">LX_王彤彤</span>

                        <div>姓名:王彤彤时间:2021年4月24日一:朗读师父的十大人生哲学二:师父的早安分享感悟很喜欢这句话:所有的行动都是基于目标的尝试,没有所谓的失败,只是不同尝试后得到的不同结果,让我们更好地调整下一次的行动。三:感恩日记1.我太幸福了,我很感恩姑姑,因为姑姑放假又投喂了我,还给我带了饺子回家,这让我感觉很幸福。谢谢,谢谢,谢谢。2.我太幸福了,我很感恩师父晚上的直播,因为听他的分享我知道怎么更好的去</div>
                    </li>
                    <li><a href="/article/1950214205252628480.htm"
                           title="为了在未来的人工智能世界中取得成功,学生们必须学习人类写作的优点" target="_blank">为了在未来的人工智能世界中取得成功,学生们必须学习人类写作的优点</a>
                        <span class="text-muted">睿邸管家</span>

                        <div>澳大利亚各地的学生在新学年开始使用铅笔、钢笔和键盘学习写字。在工作场所,机器也在学习写作,如此有效,几年之内,它们可能会写得比人类更好。有时它们已经做到了,就像Grammarly这样的应用程序所展示的那样。当然,人类现在的日常写作可能很快就会由具有人工智能(AI)的机器来完成。手机和电子邮件软件常用的预测文本是无数人每天都在使用的一种人工智能写作形式。据AI行业研究机构称,到2022年,人工智能及</div>
                    </li>
                    <li><a href="/article/1950213434863841280.htm"
                           title="闭组进行时..." target="_blank">闭组进行时...</a>
                        <span class="text-muted">李亚青_强化班</span>

                        <div>今天是2019年12月1号距离开始三月学习的日子:2019年10月07,已经过去将近两个月,回顾这一阶段的学习,收获了什么?又学会了什么呢?图片发自App我想,收获最大的就是身边这一群人吧,有和蔼可亲的学姐,贴心的学长,嬉戏打闹,玩的不亦乐乎,但也同样认真踏实学习小伙伴图片发自App本以为在这样的时刻,有太多太多话,太多太多想法想要表达,可言到此处,又觉得似乎没有什么想要说的了还是那句话,幸运遇到</div>
                    </li>
                    <li><a href="/article/1950213052171350016.htm"
                           title="2021-10-23" target="_blank">2021-10-23</a>
                        <span class="text-muted">赵甄文的幸福</span>

                        <div>秀荣感恩日记Day42[烟花]感恩语录感恩自己有能力有好身体,可以到处走动,做自己想做的事情10.23感恩日记今天做的事情瑜伽一小时户外散步一小时泡脚20分钟学习打卡和孩子沟通[爱心]感动的瞬间今天瑜伽回来,发现老公在厨房里做鱼。每次老公有时间休息的时候都会给我做硬菜。刘姐约我一起去公园散步晒太阳。虽然完美错过,但心里还是暖暖的。每天睁开眼打开手机,先去自己的群里逛一逛,每每发现有人点赞或者互动都</div>
                    </li>
                    <li><a href="/article/1950212797946195968.htm"
                           title="孤独的守候" target="_blank">孤独的守候</a>
                        <span class="text-muted">怒吼的生命</span>

                        <div>孤独了时光岁月了寂寞带来了惆怅那些孤独的日子里我们珍惜奋斗起来品味人生的真谛做到更好奋斗当中的你是那么努力格外自律学习起来五彩斑斓那些日子时光匆匆人生的机会很多需要把握痛苦的回忆记得住那些忧愁孤苦五一的日子寂寞当中的你时光荏苒独自带给我荒草学习起来努力奋斗可是我们做的还不够把握发展生活带给我们更多希望静静的述说你的故事你的精彩人生当中我们总是努力把握生活带给我们更多的学习生活当中我们奋斗可是做的还</div>
                    </li>
                    <li><a href="/article/1950209368356089856.htm"
                           title="AI模型训练中过拟合和欠拟合的区别是什么?" target="_blank">AI模型训练中过拟合和欠拟合的区别是什么?</a>
                        <span class="text-muted">workflower</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                        <div>在AI模型训练中,过拟合和欠拟合是两种常见的模型性能问题,核心区别在于模型对数据的学习程度和泛化能力:欠拟合(Underfitting)-定义:模型未能充分学习到数据中的规律,对训练数据的拟合程度较差,在训练集和测试集上的表现都不好(如准确率低、损失值高)。-原因:-模型结构过于简单(如用线性模型解决非线性问题);-训练数据量不足或特征信息不充分;-训练时间太短,模型尚未学到有效模式。-表现:训练</div>
                    </li>
                    <li><a href="/article/1950208983868436480.htm"
                           title="2018-08-29精进打卡" target="_blank">2018-08-29精进打卡</a>
                        <span class="text-muted">米兰王</span>

                        <div>姓名:王兰英【日精进打卡第25天】【知~学习】《六项精进》1遍共39遍《大学》1遍共50遍【经典名句分享】一切都是最好的安排。【行~实践】一、修身:(对自己个人)1,散步1小时。2,每天坚持读书。二、齐家:(对家庭和家人)1,指导孩子开车。2,和家人一起逛超市。三、建功:(对工作)用心做好每件事。{积善}:发愿从2018年8月5日起1年内365个善事。今日1善,累计27善。【省~觉悟】正人先正己。</div>
                    </li>
                    <li><a href="/article/1950207203017289728.htm"
                           title="陶勇:要不要参加分班考试学习?看完再说。" target="_blank">陶勇:要不要参加分班考试学习?看完再说。</a>
                        <span class="text-muted">陶勇</span>

                        <div>每年到了升学季,有很多培训机构都特别忙,为什么呢?因为有成千上万的学生,会选择升学前的分班考试的培训。比如说,小升初的孩子,到了暑假,很多孩子都会去选择一个初中,初一的分班考试的培训,那考入高中的孩子也有很多孩子会选择这种新高一的分班考试的培训。当然了,我个人认为这种选择并不是孩子自身的选择,主要还是家长的选择。当然也有少数孩子会对自己有比较高的要求,他们也会主动的去选择。为什么要去上分班考试的这</div>
                    </li>
                    <li><a href="/article/1950204954295726080.htm"
                           title="Anaconda 和 Miniconda:功能详解与选择建议" target="_blank">Anaconda 和 Miniconda:功能详解与选择建议</a>
                        <span class="text-muted">古月฿</span>
<a class="tag" taget="_blank" href="/search/python%E5%85%A5%E9%97%A8/1.htm">python入门</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a>
                        <div>Anaconda和Miniconda详细介绍一、Anaconda的详细介绍1.什么是Anaconda?Anaconda是一个开源的包管理和环境管理工具,在数据科学、机器学习以及科学计算领域发挥着关键作用。它以Python和R语言为基础,为用户精心准备了大量预装库和工具,极大地缩短了搭建数据科学环境的时间。对于那些想要快速开展数据分析、模型训练等工作的人员来说,Anaconda就像是一个一站式的“数</div>
                    </li>
                    <li><a href="/article/1950204901929840640.htm"
                           title="求解——妊娠纹霜哪个牌子好?皮肤专家推荐的热门秘诀!" target="_blank">求解——妊娠纹霜哪个牌子好?皮肤专家推荐的热门秘诀!</a>
                        <span class="text-muted">zhangxing0100</span>

                        <div>妊娠纹会严重影响女性的美观,那孕期的女性朋友该如何避免减少妊娠纹的出现呢?下面美腹丽人小编为大家分享了预防妊娠纹的方法,赶紧一起来学习吧!一、预防妊娠纹的饮食习惯1、多食用对皮肤内胶原纤维有利的食品来增强皮肤的弹性。2、控制糖分摄入,少吃色素含量高的食物。3、早晚两杯脱脂牛奶,多食用维丰富的蔬菜、水果和富含维生素及矿物质的食物,增加细胞膜的通透性和皮肤的新陈代谢功能。4、正确的喝水习惯可以提速皮肤</div>
                    </li>
                    <li><a href="/article/1950201221415497728.htm"
                           title="2023-01-07" target="_blank">2023-01-07</a>
                        <span class="text-muted">阿诗玛_6209</span>

                        <div>姓名:赵丽娟【日精进打卡第1783天】【知~学习】读书《经营与会计》ok《活法》3-47-8【经典名句】执着追求并从中得到最大快乐的人,才是成功者。——梭罗一、修身:(对自己个人)1、保持心态平和.2、坚持打卡.坚持读书。3、早晨喝杯温水.4、坚持烫脚,养成早睡早起的习惯.二、齐家:三、建功:(对工作){积善}:发愿从2018年1月28日起见善行善,今日0善。【省~觉悟】1,睡觉时把手机放到离自己</div>
                    </li>
                    <li><a href="/article/1950201222665400320.htm"
                           title="认命修运 每日一省(16)" target="_blank">认命修运 每日一省(16)</a>
                        <span class="text-muted">星_6329</span>

                        <div>命每个人的命都是父母带来的,我们每个人都没有权利选择父母,没有权利选择自己的出生。一个人从出生的那一刻就注定了你的命。我所说的认命,就是客观的接受自己的父母,接受自己的家庭。不对抗,不较劲。有些人是含着金汤匙出生的,有些人刚一出生拥有的财富可能是我们一生都得不到的。有些人是踩着泥坑出生的。有些人一出生就是等着继承皇位的。运在我们成长的过程当中,我们付出努力,学习知识,成长自己,帮助他人。我们有权利</div>
                    </li>
                    <li><a href="/article/1950200667587014656.htm"
                           title="学C++的五大惊人好处" target="_blank">学C++的五大惊人好处</a>
                        <span class="text-muted"></span>

                        <div>为什么要学c++学c++有什么用学习c++的好处有1.中考可以加分2.高考可能直接录取3.就业广且工资高4.在未来30--50年c++一定是一个很受欢迎的职业5.c++成功的例子deepsick等AI智能C++语言兼备编程效率和编译运行效率的语言C++语言是C语言功能增强版,在c语言的基础上添加了面向对象编程和泛型编程的支持既继承了C语言高效,简洁,快速和可移植的传统,又具备类似Java、Go等其</div>
                    </li>
                    <li><a href="/article/1950199910724857856.htm"
                           title="机器学习必备数学与编程指南:从入门到精通" target="_blank">机器学习必备数学与编程指南:从入门到精通</a>
                        <span class="text-muted">a小胡哦</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/1.htm">机器学习基础</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>一、机器学习核心数学基础1.线性代数(神经网络的基础)必须掌握:矩阵运算(乘法、转置、逆)向量空间与线性变换特征值分解与奇异值分解(SVD)为什么重要:神经网络本质就是矩阵运算学习技巧:用NumPy实际操作矩阵运算2.概率与统计(模型评估的关键)核心概念:条件概率与贝叶斯定理概率分布(正态、泊松、伯努利)假设检验与p值应用场景:朴素贝叶斯、A/B测试3.微积分(优化算法的基础)重点掌握:导数与偏导</div>
                    </li>
                                <li><a href="/article/3.htm"
                                       title="枚举的构造函数中抛出异常会怎样" target="_blank">枚举的构造函数中抛出异常会怎样</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a>
                                    <div>首先从使用enum实现单例说起。 
 
为什么要用enum来实现单例? 
这篇文章( 
http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html)阐述了三个理由: 
1.enum单例简单、容易,只需几行代码: 
 

public enum Singleton {
	INSTANCE;</div>
                                </li>
                                <li><a href="/article/130.htm"
                                       title="CMake 教程" target="_blank">CMake 教程</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                                    <div>转自:http://xiang.lf.blog.163.com/blog/static/127733322201481114456136/ 
  
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。 
介绍:http://baike.baidu.com/view/1126160.htm 
本文件不介绍CMake的基本语法,下面是篇不错的入门教程: 
http:</div>
                                </li>
                                <li><a href="/article/257.htm"
                                       title="cvc-complex-type.2.3: Element 'beans' cannot have character" target="_blank">cvc-complex-type.2.3: Element 'beans' cannot have character</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Webgis/1.htm">Webgis</a>
                                    <div>  cvc-complex-type.2.3: Element 'beans' cannot have character 
    Line 33 in XML document from ServletContext resource [/WEB-INF/backend-servlet.xml] is i</div>
                                </li>
                                <li><a href="/article/384.htm"
                                       title="jquery实例:随页面滚动条滚动而自动加载内容" target="_blank">jquery实例:随页面滚动条滚动而自动加载内容</a>
                                    <span class="text-muted">120153216</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                                    <div><script language="javascript">
$(function (){
	var i = 4;$(window).bind("scroll", function (event){
		//滚动条到网页头部的 高度,兼容ie,ff,chrome
		var top = document.documentElement.s</div>
                                </li>
                                <li><a href="/article/511.htm"
                                       title="将数据库中的数据转换成dbs文件" target="_blank">将数据库中的数据转换成dbs文件</a>
                                    <span class="text-muted">何必如此</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/dbs/1.htm">dbs</a>
                                    <div>旗正规则引擎通过数据库配置器(DataBuilder)来管理数据库,无论是Oracle,还是其他主流的数据都支持,操作方式是一样的。旗正规则引擎的数据库配置器是用于编辑数据库结构信息以及管理数据库表数据,并且可以执行SQL 语句,主要功能如下。 
1)数据库生成表结构信息: 
        主要生成数据库配置文件(.conf文</div>
                                </li>
                                <li><a href="/article/638.htm"
                                       title="在IBATIS中配置SQL语句的IN方式" target="_blank">在IBATIS中配置SQL语句的IN方式</a>
                                    <span class="text-muted">357029540</span>
<a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a>
                                    <div>在使用IBATIS进行SQL语句配置查询时,我们一定会遇到通过IN查询的地方,在使用IN查询时我们可以有两种方式进行配置参数:String和List。具体使用方式如下: 
 
1.String:定义一个String的参数userIds,把这个参数传入IBATIS的sql配置文件,sql语句就可以这样写: 
 
 
 
<select id="getForms" param</div>
                                </li>
                                <li><a href="/article/765.htm"
                                       title="Spring3 MVC 笔记(一)" target="_blank">Spring3 MVC 笔记(一)</a>
                                    <span class="text-muted">7454103</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/JSF/1.htm">JSF</a>
                                    <div>    
     自从 MVC 这个概念提出来之后 struts1.X  struts2.X   jsf 。。。。。 
这个view 层的技术一个接一个! 都用过!不敢说哪个绝对的强悍! 
要看业务,和整体的设计! 
 
     最近公司要求开发个新系统!</div>
                                </li>
                                <li><a href="/article/892.htm"
                                       title="Timer与Spring Quartz 定时执行程序" target="_blank">Timer与Spring Quartz 定时执行程序</a>
                                    <span class="text-muted">darkranger</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a>
                                    <div>有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单: 1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask package com.test; import java.text.SimpleDateFormat; import java.util.Date; </div>
                                </li>
                                <li><a href="/article/1019.htm"
                                       title="大端小端转换,le32_to_cpu 和cpu_to_le32" target="_blank">大端小端转换,le32_to_cpu 和cpu_to_le32</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80%E7%9B%B8%E5%85%B3/1.htm">C语言相关</a>
                                    <div>大端小端转换,le32_to_cpu 和cpu_to_le32   字节序  
http://oss.org.cn/kernel-book/ldd3/ch11s04.html 
        小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)</div>
                                </li>
                                <li><a href="/article/1146.htm"
                                       title="Nginx负载均衡配置实例详解" target="_blank">Nginx负载均衡配置实例详解</a>
                                    <span class="text-muted">avords</span>

                                    <div>[导读] 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。负载均衡先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解  负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。 
负载均衡 
先来简单了解一下什么是负载均衡</div>
                                </li>
                                <li><a href="/article/1273.htm"
                                       title="乱说的" target="_blank">乱说的</a>
                                    <span class="text-muted">houxinyou</span>
<a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/1.htm">敏捷开发</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a>
                                    <div>从很久以前,大家就研究框架,开发方法,软件工程,好多!反正我是搞不明白!   
这两天看好多人研究敏捷模型,瀑布模型!也没太搞明白.    
不过感觉和程序开发语言差不多,   
瀑布就是顺序,敏捷就是循环.    
瀑布就是需求、分析、设计、编码、测试一步一步走下来。而敏捷就是按摸块或者说迭代做个循环,第个循环中也一样是需求、分析、设计、编码、测试一步一步走下来。   
  
也可以把软件开发理</div>
                                </li>
                                <li><a href="/article/1400.htm"
                                       title="欣赏的价值——一个小故事" target="_blank">欣赏的价值——一个小故事</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%89%E6%95%88%E8%BE%85%E5%AF%BC/1.htm">有效辅导</a><a class="tag" taget="_blank" href="/search/%E6%AC%A3%E8%B5%8F/1.htm">欣赏</a><a class="tag" taget="_blank" href="/search/%E6%AC%A3%E8%B5%8F%E7%9A%84%E4%BB%B7%E5%80%BC/1.htm">欣赏的价值</a>
                                    <div>  第一次参加家长会,幼儿园的老师说:"您的儿子有多动症,在板凳上连三分钟都坐不了,你最好带他去医院看一看。"  回家的路上,儿子问她老师都说了些什么,她鼻子一酸,差点流下泪来。因为全班30位小朋友,惟有他表现最差;惟有对他,老师表现出不屑,然而她还在告诉她的儿子:"老师表扬你了,说宝宝原来在板凳上坐不了一分钟,现在能坐三分钟。其他妈妈都非常羡慕妈妈,因为全班只有宝宝</div>
                                </li>
                                <li><a href="/article/1527.htm"
                                       title="包冲突问题的解决方法" target="_blank">包冲突问题的解决方法</a>
                                    <span class="text-muted">bingyingao</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/exclusions/1.htm">exclusions</a><a class="tag" taget="_blank" href="/search/%E5%8C%85%E5%86%B2%E7%AA%81/1.htm">包冲突</a>
                                    <div>包冲突是开发过程中很常见的问题: 
其表现有: 
1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。 
2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。 
3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就 
抛如下异常: 
 
java.lang.NoClassDefFoundError: Could not in</div>
                                </li>
                                <li><a href="/article/1654.htm"
                                       title="【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j" target="_blank">【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Stream/1.htm">Stream</a>
                                    <div>先来一段废话: 
实际工作中,业务系统的日志基本上是使用Log4j写入到日志文件中的,问题的关键之处在于业务日志的格式混乱,这给对日志文件中的日志进行统计分析带来了极大的困难,或者说,基本上无法进行分析,每个人写日志的习惯不同,导致日志行的格式五花八门,最后只能通过grep来查找特定的关键词缩小范围,但是在集群环境下,每个机器去grep一遍,分析一遍,这个效率如何可想之二,大好光阴都浪费在这上面了</div>
                                </li>
                                <li><a href="/article/1781.htm"
                                       title="sudoku solver in Haskell" target="_blank">sudoku solver in Haskell</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/sudoku/1.htm">sudoku</a><a class="tag" taget="_blank" href="/search/haskell/1.htm">haskell</a>
                                    <div>这几天没太多的事做,想着用函数式语言来写点实用的程序,像fib和prime之类的就不想提了(就一行代码的事),写什么程序呢?在网上闲逛时发现sudoku游戏,sudoku十几年前就知道了,学生生涯时也想过用C/Java来实现个智能求解,但到最后往往没写成,主要是用C/Java写的话会很麻烦。 
  
现在写程序,本人总是有一种思维惯性,总是想把程序写的更紧凑,更精致,代码行数最少,所以现</div>
                                </li>
                                <li><a href="/article/1908.htm"
                                       title="java apache ftpClient" target="_blank">java apache ftpClient</a>
                                    <span class="text-muted">bro_feng</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>最近使用apache的ftpclient插件实现ftp下载,遇见几个问题,做如下总结。 
1. 上传阻塞,一连串的上传,其中一个就阻塞了,或是用storeFile上传时返回false。查了点资料,说是FTP有主动模式和被动模式。将传出模式修改为被动模式ftp.enterLocalPassiveMode();然后就好了。 
 
看了网上相关介绍,对主动模式和被动模式区别还是比较的模糊,不太了解被动模</div>
                                </li>
                                <li><a href="/article/2035.htm"
                                       title="读《研磨设计模式》-代码笔记-工厂方法模式" target="_blank">读《研磨设计模式》-代码笔记-工厂方法模式</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 
 
 


package design.pattern;

/*
 * 工厂方法模式:使一个类的实例化延迟到子类
 * 某次,我在工作不知不觉中就用到了工厂方法模式(称为模板方法模式更恰当。2012-10-29):
 * 有很多不同的产品,它</div>
                                </li>
                                <li><a href="/article/2162.htm"
                                       title="面试记录语" target="_blank">面试记录语</a>
                                    <span class="text-muted">chenyu19891124</span>
<a class="tag" taget="_blank" href="/search/%E6%8B%9B%E8%81%98/1.htm">招聘</a>
                                    <div>或许真的在一个平台上成长成什么样,都必须靠自己去努力。有了好的平台让自己展示,就该好好努力。今天是自己单独一次去面试别人,感觉有点小紧张,说话有点打结。在面试完后写面试情况表,下笔真的好难,尤其是要对面试人的情况说明真的好难。 
今天面试的是自己同事的同事,现在的这个同事要离职了,介绍了我现在这位同事以前的同事来面试。今天这位求职者面试的是配置管理,期初看了简历觉得应该很适合做配置管理,但是今天面</div>
                                </li>
                                <li><a href="/article/2289.htm"
                                       title="Fire Workflow 1.0正式版终于发布了" target="_blank">Fire Workflow 1.0正式版终于发布了</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/workflow/1.htm">workflow</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a>
                                    <div>Fire Workflow 是国内另外一款开源工作流,作者是著名的非也同志,哈哈.... 
 官方网站是 http://www.fireflow.org 
 
 经过大家努力,Fire Workflow 1.0正式版终于发布了 
 
 正式版主要变化: 
1、增加IWorkItem.jumpToEx(...)方法,取消了当前环节和目标环节必须在同一条执行线的限制,使得自由流更加自由 
2、增加IT</div>
                                </li>
                                <li><a href="/article/2416.htm"
                                       title="Python向脚本传参" target="_blank">Python向脚本传参</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a><a class="tag" taget="_blank" href="/search/%E4%BC%A0%E5%8F%82/1.htm">传参</a>
                                    <div>如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢? 
需要模块:sys 
参数个数:len(sys.argv) 
脚本名:    sys.argv[0] 
参数1:     sys.argv[1] 
参数2:     sys.argv[</div>
                                </li>
                                <li><a href="/article/2543.htm"
                                       title="管理用户分组的命令gpasswd" target="_blank">管理用户分组的命令gpasswd</a>
                                    <span class="text-muted">dongwei_6688</span>
<a class="tag" taget="_blank" href="/search/passwd/1.htm">passwd</a>
                                    <div>NAME:  gpasswd - administer the /etc/group file 
SYNOPSIS: 
 gpasswd group 
 gpasswd -a user group 
 gpasswd -d user group 
 gpasswd -R group 
 gpasswd -r group 
 gpasswd [-A user,...] [-M user,...] g</div>
                                </li>
                                <li><a href="/article/2670.htm"
                                       title="郝斌老师数据结构课程笔记" target="_blank">郝斌老师数据结构课程笔记</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a>
                                    <div><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</div>
                                </li>
                                <li><a href="/article/2797.htm"
                                       title="yii2 cgridview加上选择框进行操作" target="_blank">yii2 cgridview加上选择框进行操作</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/GridView/1.htm">GridView</a>
                                    <div>页面代码
<?=Html::beginForm(['controller/bulk'],'post');?>
<?=Html::dropDownList('action','',[''=>'Mark selected as: ','c'=>'Confirmed','nc'=>'No Confirmed'],['class'=>'dropdown',])</div>
                                </li>
                                <li><a href="/article/2924.htm"
                                       title="linux mysql" target="_blank">linux mysql</a>
                                    <span class="text-muted">fypop</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>enquiry mysql version in centos linux 
yum list installed | grep mysql 
yum -y remove mysql-libs.x86_64 
enquiry mysql version in yum repositoryyum list | grep mysql oryum -y list mysql* 
install mysq</div>
                                </li>
                                <li><a href="/article/3051.htm"
                                       title="Scramble String" target="_blank">Scramble String</a>
                                    <span class="text-muted">hcx2013</span>
<a class="tag" taget="_blank" href="/search/String/1.htm">String</a>
                                    <div>Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively. 
Below is one possible representation of s1 = "great":</div>
                                </li>
                                <li><a href="/article/3178.htm"
                                       title="跟我学Shiro目录贴" target="_blank">跟我学Shiro目录贴</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/%E8%B7%9F%E6%88%91%E5%AD%A6shiro/1.htm">跟我学shiro</a>
                                    <div>历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以加群(334194438/348194195)一起讨论问题。 
  
  
----广告-----------------------------------------------------</div>
                                </li>
                                <li><a href="/article/3305.htm"
                                       title="nginx日志切割并使用flume-ng收集日志" target="_blank">nginx日志切割并使用flume-ng收集日志</a>
                                    <span class="text-muted">liyonghui160com</span>

                                    <div>  
   nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。第二步向nginx主</div>
                                </li>
                                <li><a href="/article/3432.htm"
                                       title="Oracle死锁解决方法" target="_blank">Oracle死锁解决方法</a>
                                    <span class="text-muted">pda158</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div> select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.</div>
                                </li>
                                <li><a href="/article/3559.htm"
                                       title="java之List排序" target="_blank">java之List排序</a>
                                    <span class="text-muted">shiguanghui</span>
<a class="tag" taget="_blank" href="/search/list%E6%8E%92%E5%BA%8F/1.htm">list排序</a>
                                    <div>   在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。   你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递</div>
                                </li>
                                <li><a href="/article/3686.htm"
                                       title="servlet单例多线程" target="_blank">servlet单例多线程</a>
                                    <span class="text-muted">utopialxw</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a>
                                    <div>转自http://www.cnblogs.com/yjhrem/articles/3160864.html 
和   http://blog.chinaunix.net/uid-7374279-id-3687149.html 
Servlet 单例多线程 
Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>