iframe
对含有iframe模块的定位:
我们直接通过ID或者Name无法定位,这时我们就要观察是否含有iframe,如果含有我们就首先需要进入ifreme.
通过ID或者Name 进入iframe模块后,在进行具体的元素定位。
以QQ邮箱为例,具体代码:
from selenium import webdriver import time as t driver=webdriver.Chrome() #导航道被测的网址 driver.get('https://mail.qq.com/') t.sleep(5) #通过ID方式进入login_frame # driver.switch_to.frame('login_frame') #通过name方式进入login_frame driver.switch_to.frame('login_frame') driver.find_element_by_id('u').send_keys('1297475047') t.sleep(8) driver.find_element_by_id('p').send_keys('cl19971220#%') t.sleep(8) driver.find_element_by_id('login_button').click() t.sleep(8)
每个网页的不同,具体的反应时间也不同,这时我们就要给留出一定的反应时间,
from selenium import webdriver import time as t '''索引的方式''' driver=webdriver.Chrome() driver.maximize_window() driver.get('https://mail.163.com/') t.sleep(5) #索引的方式 driver.switch_to.frame(0) t.sleep(3) driver.find_element_by_name('email').send_keys('qwere56@163.com') t.sleep(5) driver.quit()
获取当前页的源代码,断言和页面title
from selenium import webdriver import time as t driver=webdriver.Chrome() '''获取测试的地址''' driver.get('http://www.baidu.com') driver.find_element_by_partial_link_text('hao').click() print('获取测试的地址:',driver.current_url) print('获取当前页面源代码:',driver.page_source) #断言 assert driver.current_url.endswith('hao123.com/')==True #获取页面title print(driver.title) assert driver.title=='百度一下,你就知道' driver.close()
网页的前进后退和刷新
'''前进和和后退''' driver.get('http://www.baidu.com') t.sleep(3) driver.get('http://www.bing.com') t.sleep(3) driver.back() print('获取的地址:',driver.current_url) t.sleep(3) driver.forward() t.sleep(3) print('获取的地址:',driver.current_url) t.sleep(3) #刷新 driver.find_element_by_id('sb_form_q').send_keys('chen') t.sleep(3) driver.refresh() t.sleep(3) driver.close()
driver.get('http://www.baidu.com') #获取当前窗口 nowHander=driver.current_window_handle t.sleep(3) driver.find_element_by_partial_link_text('hao').click() t.sleep(3) #获取所有窗口 allHander=driver.window_handles t.sleep(3) for Hander in allHander: #判断窗口不是当前窗口 if Hander!=nowHander: #切换到新的窗口 driver.switch_to.window(Hander) t.sleep(5) driver.find_element_by_xpath('//*[@id="search"]/form/div[2]/input').send_keys('chen') t.sleep(3) driver.close() driver.switch_to.window(nowHander) t.sleep(5) driver.find_element_by_id('kw').send_keys('百度一下') t.sleep(3) driver.quit()
页面跳转(只能两个页面之间转换,多个页面之间转换两两之间转换)
输入框清空
以百度为例,再输入框里输入“疫情”,再清空
具体代码为:
driver=webdriver.Chrome() driver.get('http://www.baidu.com') so=driver.find_element_by_id('kw') so.send_keys('疫情') t.sleep(3) so.clear() t.sleep(3) driver.quit()
get_attribute():获取元素属性的值
所有的input里面输入的值,都是在value的属性
driver=webdriver.Chrome() driver.get('http://www.lagou.com') t.sleep(5) #点击登录 driver.find_element_by_link_text('登录').click() t.sleep(3) login=driver.find_element_by_xpath( '/html/body/div[3]/div[1]/div/div/div[2]/div[3]/div[1]/div/div[2]/form/div[1]/div/input') print(login.get_attribute('placeholder')) t.sleep(3) driver.quit()
页面元素是否可见
driver=webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') aboutBaidu=driver.find_element_by_link_text('关于百度') print(aboutBaidu.is_displayed()) driver.quit()
页面勾选元素是否勾选
driver=webdriver.Chrome() driver.get('https://mail.sina.com.cn/') autoLogin=driver.find_element_by_id('store1') t.sleep(3) print('是否勾选',autoLogin.is_selected()) autoLogin.click() t.sleep(3) print('是否勾选',autoLogin.is_selected()) driver.quit()
下拉框定位
首先对规范的下拉框进行展示
我们要选择下拉框中的Go语言。
具体代码为:
from selenium import webdriver #导入Select的类 from selenium.webdriver.support.select import Select import time as t driver=webdriverer.Chrome() driver.get( 'file:///D:/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/%E9%80%89%E6%8B%A9%E8%AF%AD%E8%A8%80.html') t.sleep(3) nr=driver.find_element_by_id('nr') #针对Select类进行实例化 select=Select(webelement=nr) #索引 # select.select_by_index(2) #value # select.select_by_value('Go') #文本 select.select_by_visible_text('Go语言') t.sleep(3) driver.quit()
在实际中,我们遇到的下拉框基本上不是规范的,这里以拉钩网为例,我们对“测试开发工程师里的薪资10-20”进行定位选择。
driver=webdriver.Chrome() driver.maximize_window() driver.get('https://www.lagou.com/') t.sleep(5) driver.find_element_by_id('search_input').send_keys('测试开发工程师')在输入框输入“测试开发工程师” t.sleep(3) driver.find_element_by_id('search_button').click() t.sleep(6) driver.find_element_by_xpath('//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[2]/div/ul/li[3]/div/span').click()定位到薪资要求 t.sleep(5) driver.find_element_by_xpath('//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[2]/div/ul/li[3]/div/div/ul[2]/li[4]/span').click()定位到10-20 t.sleep(8) driver.quit()
这里要特别注意在复制XPath是我们要特别注意,复制过来的是否正确,当我们确定找到正确的XPath位置但还是无法进入时
,就要特别关注一下div[]索引位置是否正确