目的:
有些被測試也你按包好Ajax的局部刷新機制,並且會產生顯示多條數據的浮動框,需要單機選擇浮動框中包含某個關鍵字的選項
測試網址:
http://www.sogou.com
from selenium import webdriver from selenium.webdriver.common.keys import Keys import unittest import time class TestDemo(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_execut(self): url = "https://www.sogou.com/" self.driver.get(url) # 找到輸入框 searchBox = self.driver.find_element_by_id("query") time.sleep(2) # 在輸入框輸入內容 searchBox.send_keys("河北") time.sleep(2) # 你想點擊第幾個輸入框的內容 就循環幾次 for i in range(3): searchBox.send_keys(Keys.DOWN) time.sleep(1) searchBox.send_keys(Keys.ENTER) time.sleep(3) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
方法二 通過匹配模糊內容選擇懸浮框中的選項
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException import unittest import traceback import time class TestDemo(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_execut(self): url = "https://www.sogou.com/" self.driver.get(url) try: searchBox = self.driver.find_element_by_id("query") searchBox.send_keys("河北") time.sleep(2) suggetion_option = self.driver.find_element_by_xpath("//ul/li[contains(.,'疫情')]") time.sleep(3) suggetion_option.click() time.sleep(5) except NoSuchElementException as e: # 打印異常堆棧信息 print(traceback.print_exc()) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
還有一種情況:就是在ajax彈出框裏我們的內容是經常改變的,但是我們就是想打開第三個搜索結果的 就將第二個裏面的 xpath 改一下
suggetion_option = self.driver.find_element_by_xpath("//*[@id='vl']/div[1]/ul/li[4]")