Selenium中JS的使用(元素点击,元素样式,通过Xpath查找元素操作,JS返回值)

此文示例用的是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')"))

发布了143 篇原创文章 · 获赞 255 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/jiulanhao/article/details/100071765