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本身已支持,就没必要再重新做一个了。