了解iframe
iframe是一種html封裝,內嵌頁面,方便相同功能的網頁復用代碼,可以一定程度上減少開發量
所以在測試一個大型web項目的時候,包含iframe標簽就不稀奇,但是在切換frame之前去定位,操作frame中的元素都是無法實現的。
切換frame的方式
通過iframe的名字
driver.switch_to.frame('login_frame') driver. find_element_by_xpath("//a[text()='帳號密碼登錄']").click()
通過索引去切換iframe標簽
time.sleep(2) driver.switch_to.frame(0) driver.find_element_by_xpath('//div[@id="wxLoginTab"]').click() driver.find_element_by_xpath('//p[@id="auto_login"]/a').click()
通過element節點去進行切換
ele_iframe = driver.find_element_by_xpath('//iframe[@id="login_frame"]') driver.switch_to.frame(ele_iframe) driver.find_element_by_xpath("//a[text()='帳號密碼登錄']").click()
xpath定位
邏輯運算
and
//a[@class='nav-block' and @title='京東' and @target='_blank']
or
//span[text()='推薦' or text()='導航']
xpath函數
text() 獲取節點的文本內容 contains(parm1,param2) 判斷param1中是否函授param2 starts-with(參數1,參數2):判斷參數1是否以參數2開頭 # 匹配value屬性包含 ‘addicated’ 的標簽 // input[contains(@value,'addicated')] # 匹配title屬性包含 易購的 a 標簽 //a[contains(@title,易購')] # 匹配文本內容是 五一假期開頭的a標簽 //a[starts-with(text(),'五一假期')]
切片---后續需要更新
軸定位
定位某個節點/軸名稱 ::節點
定位 id = form 的 form節點中,子元素中name=issp的input標簽
//form[@id='form']/child::input[@name='issp']
定位id = form的form節點中, 祖先元素中 id =“wrapper”的div標簽
//form[@id='form']/ancestor::div[@id='wrapper']
三大等待
1,強制等待 time.sleep()
2,隱式等待 driver.implicitly_wait(30)
driver.implicitly_wait
3,顯示等待
WebDriverWait(driver,30,0.2)
wait.until