1. 程式人生 > 其它 >Web自動化測試之playwright:執行JavaScript指令碼

Web自動化測試之playwright:執行JavaScript指令碼

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)
--THE END--