Web自動化測試之playwright:執行JavaScript指令碼
阿新 • • 發佈:2021-12-02
在Selenium執行JavaScript指令碼中介紹了Selenium執行JavaScript指令碼的方法,playwright也支援執行JavaScript指令碼,playwright本身就是一個Node.js庫,本文介紹playwright-python執行js指令碼的方法。
目錄playwright-python使用 evaluate()
方法來執行JavaScript指令碼,和selenium類似,也有兩種方法實現元素操作。
- page.evaluate():直接執行完整的JavaScript指令碼。
- locator.evaluate():定位到元素後再使用JavaScript執行操作。
page.evaluate()
在瀏覽器上下文中執行:
page.evaluate(expression, **kwargs)
示例程式碼:
from playwright.sync_api import sync_playwright class TestJs(): def setup(self): playwright = sync_playwright().start() self.browser = playwright.chromium.launch(headless=False) self.context = self.browser.new_context() self.page = self.context.new_page() def teardown(self): self.browser.close() def test_case1(self): self.page.goto("https://www.baidu.com/") # 獲取瀏覽器語言 lan = self.page.evaluate("window.navigator.language;") assert lan == "zh-CN" # 獲取當前瀏覽器標題:"百度一下,你就知道" title = self.page.evaluate("document.title;") assert title == self.page.title() self.page.evaluate('document.getElementById("kw").value = "test"') # 搜尋框輸入“test” text = self.page.evaluate("document.getElementById('kw').value") # 讀取輸入的值 assert text == "test" self.page.evaluate('document.getElementById("su").click()') # 點選 【百度一下】;page.click("text=百度一下") self.page.click("#page >> text=2")
locator.evaluate()
先定位到元素後再進行js操作:
handle = page.query_selector("id=kw")
handle.evaluate('node => node.value = "test"')
下面來看一個例子,實現上面程式碼中的操作:輸入“test”,點選【百度一下】
def test_case2(self): self.page.goto("https://www.baidu.com/") # 搜尋框輸入“test” input_handle = self.page.query_selector("id=kw") input_handle.evaluate('node => node.value = "test"') text = input_handle.evaluate('node => node.value') # 讀取輸入的值 print(text) assert text == "test" # 點選 【百度一下】 submit_handle = self.page.query_selector("id=su") submit_handle.evaluate('node => node.click()') time.sleep(10)