Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

Python加Selenium自动化测试知乎网站(五)用javascript辅助



我们可以用selenium webdriver来做常用控件的操作,比如点击、输入文字、选择下拉项等。不过web测试是基于浏览器的,我们同样可以用自定义的javascript来辅助我们模拟一些操作。selenium可以直接执行javascript的语句。

像点击、输入等都可以用javascript来做,但我们没必要再造一次轮子,用selenium自带的就好。我们用自定义的js的情况一般是辅助脚本运行,比如滑动页面、获取页面状态、修改属性等。

我们先创建一个文件用于测试脚本来调用:

# utils/js_helper
class JSHelper:

    @property
    def scroll_into_view(self):
        return "arguments[0].scrollIntoView(true);"

    @property
    def scroll_up_to_top_of_page(self):
        return "window.scrollTo(0, 0);"

    @property
    def scroll_down_to_bottom_of_page(self):
        return "window.scrollBy(0,document.body.scrollHeight);"

    @classmethod
    def scroll_to(cls, x, y):
        return f"window.scrollBy({x}, {y})"

    @classmethod
    def scroll_to_left(cls, x):
        return f"arguments[0].scrollLeft += {x}"

    @property
    def get_page_load_status(self):
        return "return document.readyState"

    @classmethod
    def set_attribute_by_partial_class_name(cls, class_name, attr_key, attr_value):
        return f"document.querySelectorAll('[class*={class_name}]')[0].setAttribute('{attr_key}', '{attr_value}')"

接着利用这些js片段加在测试脚本中看看效果:

from selenium import webdriver
from utils.js_helper import JSHelper

topic_url = "https://www.zhihu.com/topic/19552832/hot"
driver = webdriver.Chrome()
driver.get(topic_url)
js = JSHelper()
driver.execute_script(js.scroll_down_to_bottom_of_page)  # 滚动到当前页面最下
driver.execute_script(js.scroll_to(0, 1000))  # 滚动到特定位置
focus_topic_button = driver.find_element_by_xpath("//div[@class='TopicActions TopicMetaCard-actions']/button[contains(@class, 'TopicActions-followButton')]")
driver.execute_script(js.scroll_into_view, focus_topic_button)  # 滚动到元素所在位置
driver.execute_script(js.scroll_up_to_top_of_page)
driver.execute_script(js.set_attribute_by_partial_class_name("followButton", "style", "background-color: red;"))  # 将元素的css属性改变

javascript的片段多种多样,比如这里还有一篇是关于用js拖拽HTML5控件的:JS解决Selenium无法拖拽HTML5控件的问题,看实际需求来添加即可。如果selenium本身已支持,就没必要再重新做一个了。

下一篇:  Python加Selenium自动化测试知乎网站(六)特殊操作
上一篇:  Python加Selenium自动化测试知乎网站(四)等待机制

共有0条评论

添加评论

暂无评论