python之selenium自動化測試初始

根據商品id獲取屬於哪一個店鋪能夠獲取到,在抓取的時候,使用curl函數庫,
學習到了curl能夠模擬HTTP請求,而且獲得響應,返回html,若是須要獲取
指定的元素,則可使用正則表達式,匹配元素,若是不想寫的話可使用一些PHP解析dom
插件,好比simple_html_dom。能夠取https://github.com/samacs/simple_html_dom pull
可是根據商鋪獲取商品時候,商品是ajax異步加載過來的,異步的時候若是沒登陸,沒法抓取。html

可是想法是,模擬登錄以後,把HTTP的response響應中的head中的cookie存起來,下次請求的時候把cookie放大HTTP請求頭中
想法是使用一個帳號,模擬請求登陸接口時候,使用curl模擬HTTP登陸請求,須要設置HTTP請求head的User-Agent,請求類型content-type:form-encode方式
能夠進去,可是下一步須要驗證身份,輸入手機號獲取驗證碼。不知道怎麼整了。java

可是能夠摸索的過程當中,瞭解了web自動化測試。python

①、selenium+Chromedriver+python+Chrome測試git

自動化測試工具:
1、pip是一個Python包管理工具。pip install selenium時報錯 pip版本過低。
更新pip版本命令使用:python -m pip install --upgrade pipgithub

安裝pip時,須要有兩種安裝方式:
①、一種在線安裝, 就是pip install selenium
②、第二種離線安裝,先把pip下載到本地:下載地址:https://pypi.python.org/pypi/pipweb

升級pip

pip.exe install -U pip-9.0.2-py2.py3-none-any.whlajax

安裝selenium

pip.exe install selenium-3.11.0-py2.py3-none-any.whl
2、https://npm.taobao.org/mirrors/chromedriver
選擇版本的時候要和Chrome瀏覽器版本一致。安裝完須要把Chromedriver放到環境變量中。正則表達式

寫一個python腳本(hello.py):
from selenium import webdriverchrome

browser = webdriver.Chrome()
browser.get('http://www.qq.com/')npm

運行python hello.py,這樣,會啓動Chrome瀏覽器,自動打開www.qq.com

selenium經過Chromedriver驅動打開Chrome瀏覽器。這樣的測試腳本的客戶端必須和瀏覽器的客戶端在一塊。
因此說,若是腳本是在Linux上運行,若是Linux沒有安裝Chrome的話、或者Linux沒有安裝圖形安裝界面。這種方法就
沒辦法實現測試了。這樣可使用另外一種方法。安裝selenium-server版(這版本的話是個jar包,須要安裝jdk)+Chromedriver+Chrome(這樣啓動selenium服務)
測試腳本中經過連接selenium服務的端口就能夠,遠程測試了。

②、selenium-server版+Chromedriver+Chrome+python

去selenium官網下載selenium的server版,我在這裏下載的是2.46,下載的是個jar包,因此須要jdk啓動它。
正好在安裝NetBeans的時候也須要安裝jdk,因此不用安裝了,可是進入cmd輸入java --version報錯未知的命令。應該是jdk不在
環境變量中,因此把java的加到path環境變量中。

開啓selenium服務可使用下面的命令:

java -jar F:\chromedriver_win32\selenium-server-standalone-2.46.0.jar ^
-timeout=20 ^
-browserTimeout=60 ^
-Dwebdriver.chrome.driver=F:\chromedriver_win32\chromedriver.exe

輸入這個命令後,會啓動selenium服務,命令會輸出
jdk版本信息
會監聽:http://127.0.0.1:4444/wd/hub

DOS中的清除屏幕命令cls至關於Unix中的clear,在Linux中若是一個命令長了可使用\斜線換行,可是在DOS中這個很差使,須要使用^符號。

學習到了python中註釋方法。單行註釋,可使用#號,多上註釋可使用三個引號,能夠是三個單引號也能夠是三個雙引號。

寫一個python腳本(selenium_common.py)代碼以下:
from selenium import webdriver

driver = webdriver.Chrome()
executor_url = driver.command_executor._url
session_id = driver.session_id
print(session_id)
print(executor_url)
driver.get("http://www.spiderpy.cn/")

我想每次腳本啓動時打開多個回話(即瀏覽器,感受不太好,在網上搜索到以下代碼)
可是我想服用這個session回話的話,怎麼使用可使用
寫一個python腳本(selenium_common2.py)。

from selenium import webdriver

driver = webdriver.Chrome()
executor_url = driver.command_executor._url
session_id = driver.session_id
driver.get("http://www.spiderpy.cn/")

print(session_id)
print(executor_url)

driver2 = webdriver.Remote(command_executor=executor_url, desired_capabilities={})
driver2.session_id = session_id
print(driver2.current_url)

可是這樣會從新打開一個空白的回話。在網上查詢是python的Remote類每次實例化的時候,會執行start_session()
因此會從新打開一次空白回話。

看網上是重寫了一個Remote類

class ReuseChrome(Remote):

def __init__(self, command_executor, session_id):
    self.r_session_id = session_id
    Remote.__init__(self, command_executor=command_executor, desired_capabilities={})

def start_session(self, capabilities, browser_profile=None):
    """
    重寫start_session方法
    """
    if not isinstance(capabilities, dict):
        raise InvalidArgumentException("Capabilities must be a dictionary")
    if browser_profile:
        if "moz:firefoxOptions" in capabilities:
            capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
        else:
            capabilities.update({'firefox_profile': browser_profile.encoded})

    self.capabilities = options.Options().to_capabilities()
    self.session_id = self.r_session_id
    self.w3c = False
相關文章
相關標籤/搜索