此文示例用的是Python语言
在Python中selenium执行js很容易,它的执行函数就存在于WebDriver中,Java需要导入其他包。
简单示例
from selenium import webdriver
import random
import pytest
import time
class Test_restart(object):
@pytest.fixture(scope="function", autouse=True)
def setUp(self):
global dr
dr = webdriver.Chrome('D:\\chromedriver456.exe')
yield
dr.quit()
def test_one(self):
# dr = self.dr
#assert random.randint(1, 3) == 3
dr.maximize_window()
dr.get('https://www.baidu.com/')
dr.implicitly_wait(3)
el_text = dr.find_element_by_id('kw')
el_text.send_keys('雪落下的声音')
time.sleep(1)
el_click = dr.find_element_by_id('su')
el_click.click()
time.sleep(3)
#JS语句
js = "window.scrollTo(0,1000)"
js2= "alert('提示信息!');"
dr.execute_script(js2)
time.sleep(5)
主要就是dr.execute_script()把要执行的js扔进去,上述执行的是一个窗口往下滚动的操作或是警告框弹出。
还可以用于一些虽然用Xpath定位到了确点击不到的元素。
from selenium import webdriver
import random
import pytest
import time
class Test_restart(object):
@pytest.fixture(scope="function", autouse=True)
def setUp(self):
global dr
dr = webdriver.Chrome('D:\\chromedriver456.exe')
yield
dr.quit()
def test_one(self):
# dr = self.dr
#assert random.randint(1, 3) == 3
dr.maximize_window()
dr.get('https://www.baidu.com/')
dr.implicitly_wait(3)
el_text = dr.find_element_by_id('kw')
el_text.send_keys('雪落下的声音')
time.sleep(1)
el_click = dr.find_element_by_id('su')
el_click.click()
time.sleep(3)
# #JS语句
# js = "window.scrollTo(0,1000)"
# js2= "alert('提示信息!');"
#
# dr.execute_script(js2)
el_text.clear()
el_text.send_keys('约定')
time.sleep(1)
#通过document找到元素并实现点击操作
js_click = "document.getElementById('su').click();"
dr.execute_script(js_click)
time.sleep(5)
execute_script()此函数还支持在元素级别执行JavaScript。
from selenium import webdriver
import random
import pytest
import time
class Test_restart(object):
@pytest.fixture(scope="function", autouse=True)
def setUp(self):
global dr
dr = webdriver.Chrome('D:\\chromedriver456.exe')
yield
dr.quit()
def test_one(self):
# dr = self.dr
#assert random.randint(1, 3) == 3
dr.maximize_window()
dr.get('https://www.baidu.com/')
dr.implicitly_wait(3)
el_text = dr.find_element_by_id('kw')
el_text.send_keys('雪落下的声音')
time.sleep(1)
el_click = dr.find_element_by_id('su')
el_click.click()
time.sleep(3)
el_text.clear()
el_text.send_keys('约定')
time.sleep(1)
#对元素执行操作
js_click = "arguments[0].click()"
#第一参数执行的语句(arguments[0]传入的元素集中的第1个),第二参数对于那个元素进行操作
dr.execute_script(js_click,el_click)
time.sleep(5)
还可以附加给元素加入样式
js_click = "document.getElementById('su').setAttribute('style','border:2px solid red');"
#第一参数执行的语句,第二参数对于那个元素进行操作
dr.execute_script(js_click,el_click)
其他的格式
#arguments[1]代表占位符,元素参数后的值
driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",element,
"border:2px solid red;")
另一种
#第一参数执行的语句,第二参数对于那个元素进行操作
dr.execute_script("arguments[0].setAttribute('style','border:2px solid red');arguments[1].setAttribute('style','border:2px solid red');",el_click,el_text)
————————————————————————————————————————————————
个人感觉觉实用的,通过Js使用Xpath查找元素并操作
#固定格式
dr.execute_script("document.evaluate(\".//*[@id='su']\", document).iterateNext().click()")
通过Js操作元素并返回值
print(dr.execute_script("return document.getElementById('su').getAttribute('value')"))