赞
踩
测试时常需要模拟键盘或鼠标操作,可以用Python的ActionChains来模拟。ActionChains是Selenium提供的一个子类,用于生成和执行复杂的用户交互操作,允许将一系列操作链接在一起,然后一次性执行。
- from selenium import webdriver
- from selenium.webdriver.common.action_chains import ActionChains
- from selenium.webdriver.common.by import By
- from selenium.webdriver.common.keys import Keys
-
- # 初始化WebDriver和ActionChains
- driver = webdriver.Chrome()
- actions = ActionChains(driver)
-
- # 打开一个网页
- driver.get("https://www.example.com")
- element = driver.find_element(By.ID, "example_id")
- actions.move_to_element(element).click().perform()
actions.context_click(element).perform()
actions.double_click(element).perform()
- source = driver.find_element(By.ID, "source_id")
- target = driver.find_element(By.ID, "target_id")
- actions.drag_and_drop(source, target).perform()
actions.click_and_hold(source).move_to_element(target).release().perform()
actions.send_keys("Hello World!").perform()
actions.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
测试时要定位Web内的一个元素时,若定位不到这个元素,就需要考虑是不是浏览器内嵌了一个frame窗口,或者要找的元素在新打开的窗口。为了解决这个问题就需要进行frame切换或者窗口切换操作。
frame类似于在原有主HTML的基础上又嵌套了一个HTML,嵌套的HTML是独立的,不影响主HTML。执行Web测试打开一个页面时,光标的定位是在主页面中,如果主页面是由多个frame组成的,那么光标无法直接定位到具体的元素,需要切换到对应的frame中。
- from selenium import webdriver
- from selenium.webdriver.common.by import By
-
- driver = webdriver.Chrome()
- driver.get("https://www/example.com")
可以通过iframe在页面中的索引来切换。索引从0开始
driver.switch_to.frame(0)
如果iframe有name或id属性,可以通过这些属性来切换
driver.switch_to.frame("iframe_name")
先找到iframe元素,然后通过该元素切换
- iframe_element = driver.find_element(By.TAG_NAME, "iframe")
- driver.switch_to.frame(iframe_element)
如果iframe内部还有iframe,需要先切换到外层iframe,然后再切换到内层的iframe
- outer_iframe = driver.find_element(By.ID, "outer_iframe_id")
- driver.switch_to.frame(outer_iframe)
- inner_iframe = driver.find_element(By.ID, "inner_iframe_id")
- driver.switch_to.frame(inner_iframe)
-
- # 切换到外层iframe
- driver.switch_to.parent_frame()
无论当前再哪个iframe中,都可以直接切换到主文档
driver.switch_to.default_content()
元素有属性,浏览器的窗口也有属性,浏览器窗口的属性用句柄(handle)来识别。当用浏览器打开一个窗口时,就需要用句柄来操作这个窗口。
- # 获取当前窗口的句柄
- cnt_handle = driver.current_window_handle
- # 获取所有窗口的句柄
- all_handles = driver.window_handles
driver.switch_to.window(target_handle)
自动化测试过程中,往往需要对不同的浏览器做兼容性测试,可以通过对测试用例的修改实现对不同浏览器的自动化兼容性测试。实现对不同浏览器的自动化兼容性测试,需要先将各个浏览器的驱动在PC端配置好。
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- import time
-
- def test_with_browser(browser_name):
- if browser_name == "chrome":
- driver = webdriver.Chrome()
- elif browser_name == "firefox":
- driver = webdriver.Firefox()
- elif browser_name == "edge":
- driver = webdriver.Edge()
- elif browser_name == "safari":
- driver = webdriver.Safari()
- else:
- raise ValueError(f"Unsupported browser: {browser_name}")
-
- driver.get("https://www.baidu.com")
- print(f"{browser_name.capitalize()} - Title: {driver.title}")
- driver.quit()
-
- if __name__ == "__main__":
- for browser in ["chrome", "firefox", "edge", "safari"]:
- test_with_browser(browser)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。