說明
本文參考答案基于Chrome压状,分辨率1920*1080舒憾,在其他環(huán)境表現(xiàn)可能會不同。
本文代碼地址
- 參考書籍下載:
Learning Selenium Testing Tools with Python-2014.pdf
Selenium自動化測試 基于 Python 語言 - 2018.pdf
上機實操: 在新的TAB打開連接
- 打開:https://china-testing.github.io/
- 選擇"數(shù)據(jù)分析"欄目的文章
- 按住"Ctrl+TAB"選擇"python"欄目的文章
- 切換到新的標簽"python"
- 關閉新的標簽"python"
- 關閉瀏覽器
參考答案
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 討論釘釘免費群21745728 qq群144081101 567351477
# CreateDate: 2018-10-17
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://china-testing.github.io/")
driver.implicitly_wait(30)
driver.maximize_window()
element = driver.find_element_by_link_text('數(shù)據(jù)分析')
element.click()
time.sleep(3)
element = driver.find_element_by_link_text('python')
ActionChains(driver).key_down(Keys.CONTROL).click(element).key_up(
Keys.CONTROL).perform()
time.sleep(3)
driver.switch_to.window(driver.window_handles[1])
time.sleep(3)
driver.close() # 關閉當前TAB
time.sleep(3)
driver.quit()
- 面試問答
- driver.quit() 和 driver.close()有什么區(qū)別凤瘦?
2.selenium中按下和松開鍵如何表示溶浴?
3.簡述ActionChains類的作用?
上機實操: 基于坐標移動
- 打開:http://guidebook.seleniumacademy.com/Selectable.html (可能需要VPN)
- 輸出數(shù)字1的位置和大小
- 輸出數(shù)字6的位置和大小
- 利用數(shù)字1的位置和大小移動到數(shù)字6
圖片.png
參考答案
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 討論釘釘免費群21745728 qq群144081101 567351477
# CreateDate: 2018-10-20
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://guidebook.seleniumacademy.com/Selectable.html")
driver.implicitly_wait(30)
driver.maximize_window()
one= driver.find_element_by_name('one')
print(one.location)
print(one.size)
six = driver.find_element_by_name('six')
print(six.location)
print(six.size)
actions = ActionChains(driver)
actions.move_by_offset(one.size['width'] + one.location['x'],
one.size['height'] + one.location['y']).click().perform()
input('Press ENTER to close the automated browser')
driver.quit()
- 面試問答
- 如果獲取元素的位置信息和大小闸迷?
2.move_by_offset()有什么作用瘩蚪?
上機實操: 發(fā)送delete鍵在google drive上刪除文件
- 準備能訪問google drive,并在firefox上保存了登錄的賬號稿黍。
- 打開:https://drive.google.com
- 點擊第一個文件,進行刪除
- 按上述步驟循環(huán)刪除所有文件
圖片.png
參考答案
# -*- coding: utf-8 -*-
# 討論釘釘免費群21745728 qq群144081101 567351477
# CreateDate: 2018-10-20
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
fp = webdriver.FirefoxProfile(r'C:\Users\acer\AppData\Roaming\Mozilla\Firefox\Profiles\ar8m1pr8.default')
driver = webdriver.Firefox(fp)
driver.get("https://drive.google.com")
driver.implicitly_wait(20)
driver.maximize_window()
elements = driver.find_elements_by_xpath("http://div[3]/span")
while elements:
ActionChains(driver).click(elements[0]).send_keys(Keys.DELETE).perform()
elements = driver.find_elements_by_xpath("http://div[3]/span")
input('Press ENTER to close the automated browser')
driver.quit()
- 面試問答
- 如果找到實際打開瀏覽器默認的firebox profile崩哩?
2.如何發(fā)送DELETE鍵巡球?
上機實操: 驗證懸浮提示內容
圖片.png
- 鼠標移動到上圖的"Your age:"
- 確認懸浮提示內容為'We ask for your age only for statistical purposes.'
- 關閉瀏覽器
- 參考答案
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 討論釘釘免費群21745728 qq群144081101 567351477
# CreateDate: 2018-10-17
import unittest
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.action_chains import ActionChains
class ToolTipTest (unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("http://jqueryui.com/tooltip/")
self.driver.implicitly_wait(30)
self.driver.maximize_window()
def test_tool_tip(self):
driver = self.driver
frame_elm = driver.find_element_by_class_name('demo-frame')
driver.switch_to.frame(frame_elm)
time.sleep(3)
age_field = driver.find_element_by_id('age')
ActionChains(self.driver).move_to_element(age_field).perform()
time.sleep(3)
tool_tip_elm = WebDriverWait(self.driver, 10).until(
expected_conditions.visibility_of_element_located((
By.CLASS_NAME, 'ui-tooltip-content')))
# verify tooltip message
self.assertEqual('We ask for your age only for statistical purposes.',
tool_tip_elm.text)
time.sleep(3)
def tearDown(self):
self.driver.close()
if __name__ == '__main__':
unittest.main(verbosity=2)
- 面試問答
1.move_to_element()有什么用途?
上機實操: 雙擊改變顏色
圖片.png
- 雙擊上圖藍色的框,把顏色該變成黃色
- 參考答案
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 討論釘釘免費群21745728 qq群144081101 567351477
# CreateDate: 2018-10-18
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import unittest
class DoubleClickTest (unittest.TestCase):
URL = 'http://api.jquery.com/dblclick/'
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get(self.URL)
self.driver.maximize_window()
def test_double_click(self):
driver = self.driver
frame = driver.find_element_by_tag_name('iframe')
driver.switch_to.frame(frame)
box = driver.find_element_by_tag_name('div')
# verify color is Blue
self.assertEqual('rgba(0, 0, 255, 1)',
box.value_of_css_property('background-color'))
ActionChains(driver).move_to_element(
driver.find_element_by_tag_name('body')).perform()
ActionChains(driver).double_click(box).perform()
# verify Color is Yellow
self.assertEqual('rgba(255, 255, 0, 1)',
box.value_of_css_property('background-color'))
def tearDown(self):
self.driver.close()
if __name__ == '__main__':
unittest.main(verbosity=2)
- 面試問答
1.double_click()有什么用途?
2.rgba的含義邓嘹?
上機實操: 在新的TAB打開連接
圖片.png
- 拖動左邊的框到右邊
參考答案
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 討論釘釘免費群21745728 qq群144081101 567351477
# CreateDate: 2018-10-18
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import unittest
class DragAndDropTest (unittest.TestCase):
URL = 'http://jqueryui.com/resources/demos/droppable/default.html'
def setUp(self) :
self.driver = webdriver.Chrome()
self.driver.get(self.URL)
self.driver.maximize_window()
def test_drag_and_drop(self):
driver = self.driver
source = driver.find_element_by_id('draggable')
target = driver.find_element_by_id('droppable')
ActionChains(self.driver).drag_and_drop(source, target).perform()
self.assertEqual('Dropped!', target.text)
def tearDown(self):
self.driver.close()
if __name__ == '__main__':
unittest.main(verbosity=2)
- 面試問答
1.drag_and_drop()有什么用途?
selenium 上機實操: 下拉刷新框中所有內容(實現(xiàn))
- 打開:http://www.webscrapingfordatascience.com/complexjavascript/
- 抓取框中所有內容酣栈。該框按住鼠標中鍵下滾,會有刷新內容汹押,直至完全加載
圖片.png
參考答案
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 討論釘釘免費群21745728 qq群144081101 567351477
# CreateDate: 2018-10-18
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
class at_least_n_elements_found(object):
def __init__(self, locator, n):
self.locator = locator
self.n = n
def __call__(self, driver):
elements = driver.find_elements(*self.locator)
if len(elements) >= self.n:
return elements
else:
return False
url = 'http://www.webscrapingfordatascience.com/complexjavascript/'
driver = webdriver.Chrome()
driver.get(url)
# Use an implicit wait for cases where we don't use an explicit one
driver.implicitly_wait(10)
div_element = driver.find_element_by_class_name('infinite-scroll')
quotes_locator = (By.CSS_SELECTOR, ".quote:not(.decode)")
nr_quotes = 0
while True:
# Scroll down to the bottom, now using action (chains)
action_chain = ActionChains(driver)
# Move to our quotes block
action_chain.move_to_element(div_element)
# Click it to give it focus
action_chain.click()
# Press the page down key about 10 ten times
action_chain.send_keys([Keys.PAGE_DOWN for i in range(10)])
# Do these actions
action_chain.perform()
# Try to fetch at least nr_quotes+1 quotes
try:
all_quotes = WebDriverWait(driver, 3).until(
at_least_n_elements_found(quotes_locator, nr_quotes + 1))
except TimeoutException as ex:
# No new quotes found within 3 seconds, assume this is all there is
print("... done!")
break
# Otherwise, update the quote counter
nr_quotes = len(all_quotes)
print("... now seeing", nr_quotes, "quotes")
# all_quotes will contain all the quote elements
print(len(all_quotes), 'quotes found\n')
for quote in all_quotes:
print(quote.text)
input('Press ENTER to close the automated browser')
driver.quit()
- 面試問答
1.如何模擬鼠標中鍵下滾?
參考資料
- 討論 釘釘群21745728 qq群144081101 567351477
- 本文最新版本地址
- 本文涉及的python測試開發(fā)庫 謝謝點贊矿筝!
- 本文相關海量書籍下載