1. 程式人生 > 實用技巧 >(python)Selenium - 執行JavaScript指令碼

(python)Selenium - 執行JavaScript指令碼

標題目錄

一、Selenium在當前頁進行js互動

1、Selenium能夠執行js,這使得Selenium擁有更為強大的能力。既然能執行js,那麼js能做的事,Selenium應該大部分也能做。

2、直接使用js操作頁面,能解決很多click()不生效的問題。

3、頁面滾動到底部,頂部。

4、處理富文字,時間控制元件的輸入。

開啟瀏覽器,按F12開啟開發者模式。

二、Selenium中呼叫js

execute_script:執行js

return:可以返回js的返回結果

execute_script:arguments傳參

class TestJS(Base):
    def test_js_scroll(self):
        self.driver.get('https://www.baidu.com')
        self.driver.find_element_by_id('kw').send_keys('selenium')
        # self.driver.find_element_by_id('su').click()     #點選百度一下
        element = self.driver.execute_script('
return document.getElementById("su")') #點選百度一下 element.click() # 點選百度一下 self.driver.execute_script('document.documentElement.scrollTop=5000') # 滾動到最底部 time.sleep(2) self.driver.find_element_by_xpath('//*[@id="page"]/div/a[6]/span[2]').click() time.sleep(3) for
code in [ 'return document.title', 'return JSON.stringify(performance.timing)' ] : print(self.driver.execute_script(code)) # 列印標題和內容


def test_datetime(self):
    self.driver.get('https://www.12306.cn/index/')
    time.sleep(2)
    time_element =
    self.driver.execute_script('a=document.getElementById("train_date");a.removeAttribute("readonly")')
    time.sleep(1)
    self.driver.execute_script('document.getElementById("train_date").value="2020‐12‐30"')
    time.sleep(3)
    print(self.driver.execute_script('return document.getElementById("train_date").value'))

三、檔案上傳、彈框處理

1、檔案上傳
input標籤可以直接使用send_keys(檔案地址)上傳檔案。

用法:

el = driver.find_element_by_id('上傳按鈕id')
el.send_keys('檔案路徑+檔名')

def test_file_upload(self):
    self.driver.get('https://image.baidu.com/')
    self.driver.find_element_by_xpath('//*[@id="sttb"]/img[1]').click()
    time.sleep(2)
    
self.driver.find_element_by_id('stfile').send_keys('E:\\Project_allcode\\photo\\12.png')
    time.sleep(3)

2、彈框處理機制

def test_alert(self):
    self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui‐api‐droppable')
    self.driver.switch_to_frame('iframeResult')
    
    drag = self.driver.find_element_by_id('draggable') #第一個元素
    drop = self.driver.find_element_by_id('droppable') # 第二個元素
    action = ActionChains(self.driver)
    action.drag_and_drop(drag, drop).perform() # 把第一個元素拖拽到第二個元素那裡
    time.sleep(2)
    print('點選 alert 確認')
    self.driver.switch_to.alert.accept() # 切換到彈框
    self.driver.switch_to.default_content() # 點選彈框的確認按鈕
    self.driver.find_element_by_id('submitBTN').click() # 點選“點選執行”按鈕
    time.sleep(3)

四、最後

對軟體測試、介面測試、自動化測試、軟體測試零基礎入門、效能測試、LR指令碼開發、python自動化全棧、面試經驗感興趣可以175317069,群內會有不定期的發放免費的資料連結。如果你有好的學習也資料可以私聊發我,我會註明出處之後分享給大家。