【軟體測驗大賽Web應用省賽】跳坑記錄
本文寫在預賽通過的基礎上,默認后來者已經接觸過web應用測驗,并有一定的基礎知識,
本文寫于2020.11.8省賽結束,希望這些坑以后不會再有人跳進去,
【前排提示】沒學過前端因為懶 ,所以有關網頁的術語可能使用有誤,煩請理性討論_(:з)∠)_有錯的地方可以在評論區指出~
1.frame的切換
今年的省賽功能測驗題目是登錄網易云進行操作(前兩步操作如下圖)

第一步點擊“歌手”,沒有問題,直接復制xpath然后click就行,
問題在第二步,進入到歌手頁面,發現無論怎么復制“華語女歌手”的xpath,甚至是頁面上其他地方的xpath,都無法進行點擊操作,會提示你“not such element”,這是為什么呢?我們來看一下網頁結構:


右上的紅框表示,題目要求的元素包含在一個名字叫做“contentFrame”的iframe里面,這就是我們無法進行點擊操作的原因,簡單來說,網頁的自動化操作是有空間限制的,我們第一步點進“歌手”頁面的這步操作,“歌手”元素所在的空間是默認frame;而第二步點擊“華語女歌手”,它所在的空間是另外一個iframe,我們需要通過陳述句來進入這個iframe才能進行自動化操作:
driver.switchTo().frame("contentFrame");//進入iframe
driver.switchTo().defaultContent();//回傳默認frame
類比一下,上面的操作就像我們用命令提示符的時候,如果現在的作業目錄是D盤,而你現在想洗掉C盤根目錄的某個檔案(這里假如它叫233.txt好了),那么直接 del 233.txt 是行不通的,要先把作業目錄轉換到C盤根目錄,再 del 233.txt ,
要注意,題目之后的操作要求中,有的元素在iframe里面,有的在默認frame里面,要根據情況使用上面的陳述句來切換作業frame,
2.變化的xpath
先來看一下題目的第三步操作要求:

這個所謂的“添加到播放串列”的xpath復制出來是這樣的:
driver.findElement(By.xpath("//*[@id=\"2287551604833444877\"]/td[3]/div/a")).click();
你會發現無法進行點擊,顯示“not such element”,更絕望的是,你每次復制出來的xpath都不一樣,這是因為網抑云的這個按鈕,在采用復制相對xpath的時候,復制出來的是包含時間戳的xpath(就是代碼中“id=\”后面那一串數字),這個時候我們就不能用這個xpath了(畢竟每時每刻都不同),我們要采用絕對xpath,或者說full xpath,

我們復制出來的絕對xpath長這樣:
driver.findElement(By.xpath("/html/body/div[3]/div[1]/div/div/div[3]/div[2]/div/div/div/div[1]/table/tbody/tr[3]/td[3]/div/a")).click();
平常的時候用相對就行,因為絕對太長了()
3.(此條不確定是否為得分點)用文字定位元素
有一步操作是這樣的:

這時候可以直接
driver.findElement(By.linkText("模特")).click();
由于時間倉促,沒有測驗這步操作是否正確得分,僅供參考,
今年主要是沒想到用iframe,浪費了大概兩個小時(而且之前也沒有很多web應用測驗的文章),希望這篇文章能為后來者提供一定的幫助,
隨意轉載
大概沒人會轉載吧(
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/208239.html
標籤:其他
上一篇:ES 6新特性(Day07)
