1.基礎元素定位的八種方法
WebDriver driver = new ChromeDriver();
WebElement element = new WebElement();
1.1 By.id()
element = driver.findElement(By.id)
1.2 By.name()
1.3 By.xpath()
1.3.1 路徑匹配
(1)用“/”指示節點路徑
如“/A/C/D” 表示節點"A"的子節點"C"的子節點"D", “/”表示根節點。
(2)用“//” 表示所有路徑以"//"后指定的子路徑結尾的元素
如“//E” 表示所有E元素,結果是所有三個E元素,如“//C/E”表示所有父節點為C的E元素。
(3)用“*” 表示路徑的通配符
如“/A/B/C/*”表示 A元素→B元素→C元素下的所有子元素
1.3.2 位置匹配
對於每一個元素,它的各個子元素是有序的。
如:/A/B/C[1]表示A元素→B元素→C元素的第一個子元素 /A/B/C[last()]表示A元素→B元素→C元素的最后一個子元素 /A/B/C[position()>1]表示A元素→B元素→C元素之下的位置號大於1的元素
1.3.3 屬性及屬性值
在XPath中可以利用屬性及屬性值來匹配元素,要注意的是,元素的屬性名前要有"@"前綴。例如:
//B[@id]表示所有具有屬性id的B元素
//B[@*]表示所有具有屬性的B元素
//B[not(@*)]表示所有不具有屬性的B元素
//B[@id="b1"] id值為b1的B元素
1.3.4 親屬關系搭配
XML文檔可歸結為樹型結構,因此任何一個節點都不是孤立的。通常我們把節點之間的歸屬關系歸結為一種親屬關系,如父親、孩子、祖先、后代、兄弟等等。在對元素進行匹配時,同樣可以用到這些概念。例如:
//E/parent::* 表示所有E節點的父節點元素
//F/ancestor::* 表示所有F元素的祖先節點元素
/A/child::* 表示A的所有子元素
/A/descendant::* 表示A的所有后代元素
//F/self::* 表示所有F的自身元素
//F/ancestor-or-self::* 表示所有F元素及它的祖先節點元素
/A/C/descendant-or-self::* 表示所有A元素→C元素及它們的后代元素
/A/C/following-sibling::* 表示A元素→C元素的緊鄰的后序所有兄弟節點元素
/A/C/preceding-sibling::* 表示A元素→C元素的緊鄰的前面所有兄弟節點元素
/A/B/C/following::* 表示A元素→B元素→C元素的后序的所有元素
/A/C/preceding::* 表示A元素→C元素的前面的所有元素
1.3.5 條件匹配
條件匹配就是利用一些函數的運算結果的布爾值來匹配符合條件的節點。常用於條件匹配的函數有四大類:節點函數、字符串函數、數值函數、布爾函數。例如last()、position()等等
例子如下:
1./A/B/C[position()>1]表示A元素→B元素→C元素之下的位置號大於1的元素
2. /A/B/C[last()]表示A元素→B元素→C元素的最后一個子元素
3.//B[not(@id)]表示所有不具有id屬性的B元素
4. "//a[contains(@href, 'news')]")在頁面中尋找href屬性值中包含“news”的所有a元素
5. //a[starts-with(@href, 'http://news')]") 在頁面中尋找href屬性值中以“http://news”開頭的所有a元素。@后面可以跟着尋找元素的任意屬性名
6.其他的就不一一列舉了
1.4 By.tagName()
使用tagName方法來查找元素,一般元素都是不止一個,可以結合findElements方法和type屬性來精准定位。
例如:List<WebElement> a = driver.findElements(By.tagName("a"));
1.5 By.className()
1.6 By.linkText
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新聞</a>
driver.findElement(By.linkText(“新聞”));
1.7 By.partiaLinkText()
driver.findElement(By.linkText(“新”));
1.8 By.cssSelectior()
此方法和By.xpath()類似,不熟悉規則可以直接用瀏覽器中的插件直接右擊元素,選擇Copy – Copy selector即可
2對瀏覽器窗口的一些操作
2.1.彈出窗口為Confirm類型
選擇確認:
Alert al = driver.switchTo().alert();
al.accept();
選擇取消:
Alert al = driver.switchTo().alert();
al.dismiss();
2.2 彈出窗口為Alert類型
Alert al = driver.switchTo().alert();
al.accept();
2.3 放大瀏覽器窗口
driver.manage().window().maximize();
2.4 關閉瀏覽器
driver.quit();關閉整個瀏覽器
driver.close();關閉當前瀏覽器標簽頁
2.5 刷新/前進/后退
driver.navigate().refresh();
driver.navigate().forwari();
driver.navigate().back();
2.6 獲取瀏覽器當前title
driver.getTitle();
2.7 獲取瀏覽器當前url
driver.getCurrentUrl();
2.8 獲取當前頁面源碼信息
driver.getPageSource();
2.9 其他的就不一一列舉了
2.10 切換瀏覽器頁簽
String currentWindow = driver.getWindowHandle();
List<String> windows = driver.getWindowHandles();
driver.swithTo.window(windows(1));
其他基本操作方法后續再補充…
