JS_test_demo

这篇博客展示了如何利用Python的Selenium库进行网页元素的自动化操作,包括输入、清除内容、点击、删除属性等。同时,给出了一个Base类,用于初始化网页元素,并在两个具体的测试用例中应用,分别在百度搜索和12306网站上进行操作。
摘要由CSDN通过智能技术生成

public.js_element.py

class CssElement(object):
    driver = None

    def __init__(self, css, index=None, describe=None):
        self.css = css
        if index is None:
            self.index = 0
        else:
            self.index = index
        self.desc = describe

    def __get__(self, instance, owner):
        if instance is None:
            return None
        global driver
        driver = instance.driver
        return self

    def clear(self):
        """
        清除内容
        """
        js = """var elm = document.querySelectorAll("{css}")[{index}];
                    elm.style.border="2px solid red";
                    elm.value = "";""".format(css=self.css, index=self.index)
        driver.execute_script(js)

    def input(self, value):
        """
        输入内容
        """
        js = """var elm = document.querySelectorAll("{css}")[{index}];
                    elm.style.border="2px solid red";
                    elm.value = "{value}";""".format(css=self.css, index=self.index, value=value)
        driver.execute_script(js)

    def click(self):
        """
        点击元素
        """
        js = """var elm = document.querySelectorAll("{css}")[{index}];
                   elm.style.border="2px solid red";
                   elm.click();""".format(css=self.css, index=self.index)
        driver.execute_script(js)

    def remove_attribute(self, attribute):
        """
        删除某个元素的属性,比如日期空间的readonly属性
        """
        js = """
        var elm = document.querySelectorAll("{css}")[{index}];
            elm.removeAttribute("{attr}");
        """.format(css=self.css, index=self.index, attr=attribute)
        driver.execute_script(js)

    @staticmethod
    def remove_attr(element, attribute):
        js = """
        arguments[0].removeAttribute("{attr}");
        """.format(attr=attribute)
        driver.execute_script(js, element)

    @staticmethod
    def scrollTo(x, y):
        js = """
        window.scrollTo("{}", "{}")
        """.format(x, y)
        driver.execute_script(js)

    @staticmethod
    def window_scroll(element, x, y):
        js = """
        arguments[0].scrollTo("{}", "{}")
        """.format(x, y)
        driver.execute_script(js, element)

    def height_light(self):
        js = """
        var element = document.querySelectorAll("{css}")[{index}];
            element.style.border="2px solid red";
        """.format(css=self.css, index=self.index)
        driver.execute_script(js)

    @staticmethod
    def height_lig(element):
        js = """
        arguments[0].style.border="2px solid red";
        """
        driver.execute_script(js, element)


if __name__ == '__main__':
    pass

testCases.test_js.py

import time
from selenium.webdriver.remote.webdriver import WebDriver
import unittest
from selenium import webdriver

from public.js_element import CssElement


class Base(object):
    window = CssElement

    def __init__(self, driver: WebDriver):
        self.driver = driver

    def load_url(self, url):
        return self.driver.get(url)


class BaiDuPage(Base):
    search_input = CssElement("#kw", describe="百度搜索框")
    search_button = CssElement("#su", describe="百度按钮")

    def search(self):
        self.search_input.height_light()
        self.search_input.clear()
        time.sleep(2)  # 为了看到效果
        self.search_input.input("好好学习,努力工作,赚钱买房")
        time.sleep(2)
        self.search_button.height_light()
        self.search_button.click()
        time.sleep(2)
        self.window.scrollTo("0", "500")
        time.sleep(2)  # 为了看到效果


class ChinaRailway(Base):
    data_input = CssElement("#train_date", describe="日期控件")

    def input_date(self, date):
        self.data_input.height_light()
        self.data_input.remove_attribute("readonly")
        self.data_input.input(date)
        time.sleep(2)  # 为了看到效果


class TestJs(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.maximize_window()
        self.driver.implicitly_wait(20)
        self.bai_du_page = BaiDuPage(self.driver)
        self.china_railway = ChinaRailway(self.driver)

    def test_search(self):
        """百度搜索"""
        self.bai_du_page.load_url("https://www.baidu.com")
        self.bai_du_page.search()

    def test_china_railway(self):
        """12306日期"""
        self.china_railway.load_url("https://www.12306.cn/index/")
        time.sleep(5)  #
        self.china_railway.input_date("2021-01-01")

    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__泡泡茶壶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值