First Week:Python+Selenium自动化测试(Web)
前置条件
- 导包.By、webdriver、time、
- 获取网址url = r:“www.baidu.com” ;
- 打开浏览器driver =webdriver.Chrome.get(url);
一、复习selenium元素定位方法
基础定位方法: id、name、class_name、tag_name、link_text、partial_link_text定位方式的使用
#1.使用id定位 driver.find_element(By.ID, "id"); #2.使用name定位 driver.find_element(By.NAME,"name"); #3.使用class_name定位 driver.find_element(By.CLASS_NAME,"classname"); #4.使用tag_name(标签名)进行定位输入框(input) driver.find_element(By.TAG_NAME,"input"); #5.使用link_text进行定位(要求文本全部匹配) driver.find_element(By.LINK_TEXT,"链接文本"); #6.使用partial_link_text进行定位(文本模糊匹配) driver.find_element(By.PARTIAL_LINK_TEXT,"部分链接文本");
难一丢丢的定位方法:XPath、CSS定位方法的使用
XPATH
- 路径定位
百度首页输入框:/html/body/div[1]/div[1]/div[5]/div[2]/div/form/span[1]/i[1]
或者://*[@id=“kw”]
#绝对路径:从根目录开始,繁琐要求多,不推荐使用 driver.find_element(By.XPATH, /html/body/div[1]/div[1]/div[5]/div[2]/div/form/span[1]/i[1]); #相对路径: driver.find_element(By.XPATH, //input);
"/" 后面必须接标签名,如a标签,input标签 或者 "/*"表示任意标签
- 元素属性定位:当相对路径不唯一时,可以结合元素进行定位
#相对路径: driver.find_element(By.XPATH, //*[@id="kw"]); #//*[@id="kw"]任意标签下的定位id为kw
- 属性+逻辑定位:解决重名
driver.find_element(By.XPATH, //*[@id="kw" and @class="s_ipt"]); #//*[@id="kw"]任意标签下的定位id为kw且class为s_ipt
- 层级+属性定位:自身元素不满足定位需求,先定位到父级元素,再定位
driver.find_element(By.XPATH, //*[@class="bg s_ipt_wr new-pmd quickdelete-wrap"]/input); #//*[@id="kw"]任意标签下的定位id为kw且class为s_ipt
除了以上三种方法还可以 //*[text()="xxx"] 文本内容是xxx的元素 //*[contains(@attribute,'xxx')] 属性中含有xxx的元素 //*[starts-with(@attribute,'xxx')] 属性以xxx开头的元素*
CSS
driver.find_element(By.CSS_SELECTOR, "#id");
driver.find_element(By.CSS_SELECTOR, ".class");
driver.find_element(By.CSS_SELECTOR, "input").send_keys("元素选择");
driver.find_element(By.CSS_SELECTOR, "[name = 'wd']").send_keys("属性选择");
#form > span (form一定是span的父级)
#form span (form只要再span之上就行)
driver.find_element(By.CSS_SELECTOR, "form > span > input").send_keys("层级选择");
driver.find_element(By.CSS_SELECTOR, "form span input").send_keys("层级选择");
input[type^='p'] type 属性以 p 字母开头的元素 input[type$='d'] type 属性以 d 字母结束的元素 input[type*='w'] type 属性包含 w 字母的元素



