Selenium WebDriver 中 getText() 和 getAttribute() 的差異
一、簡介
在本文中,我們將了解如何使用 Selenium WebDriver 和 Java 來取得網頁上 Web 元素的屬性值。我們也將探討getText()
和getAttribute()
方法之間的差異。
為了進行測試,我們將使用 JUnit 和 Selenium 開啟https://www.baeldung.com/contact
。該頁面有一個名為“Your Name*”
的可見輸入欄位。我們將使用此欄位來顯示getText()
和getAttribute().
2. 依賴關係
首先,我們在pom.xml
中將[selenium-java](https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java)
和Junit依賴項加入我們的專案:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.18.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.2</version> <scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.7.0</version>
</dependency>
3. 配置
接下來,我們需要設定WebDriver
。在此範例中,我們將在下載最新版本後使用其 Chrome 實作:
@BeforeEach
public void setUp() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
}
我們使用@BeforeEach
註釋的方法在每次測試之前進行初始設定。接下來,我們使用WebDriverManager
來取得 Chrome 驅動程序,而無需明確下載並安裝它。這使得我們可以使用Selenium Web Driver,而不需要使用驅動程式的絕對路徑。我們仍然需要在執行此程式碼的目標電腦上安裝 Chrome 瀏覽器。
測試完成後,我們應該關閉瀏覽器視窗。我們可以透過將driver.close()
語句放置在用@AfterEach
註解的方法中來做到這一點。這確保即使測試失敗它也會被執行:
@AfterEach
public void cleanUp() {
driver.close();
}
4. 尋找可見文字getText()
現在腳手架已經準備好了,我們必須加入程式碼來識別相關的 Web 元素。有幾種方法可以幫助 Selenium 選擇元素,例如使用 ID、CSS 選擇器、類別名稱、Xpath 等。
聯絡頁面有一個名為“Your Name*”.
我們使用瀏覽器開發工具(inspect element)來選擇與該欄位相關的HTML程式碼:
<label> Your Name*<br> <span class="wpcf7-form-control-wrap" data-name="your-name"> <input size="40" maxlength="400" class="wpcf7-form-control ``wpcf7-text wpcf7-validates-as-required" aria-required="true" aria-invalid="false" ``value="" type="text" name="your-name"> </span> </label>
4.1.測試可見文本
我們對label,
即“Your Name”.
我們可以使用 selenium Element 上的getText()
方法來取得可見文字**Element .**
現在,從 HTML 摘錄中可以明顯看出,除了可見文字之外,該label
元素還包含許多其他程式碼。但是, getText()
僅取得當我們在瀏覽器上查看頁面時可見的文字。
為了說明這一點,我們編寫了一個測試,確認頁麵包含一個帶有可見文字“Your Name”.
首先,我們定義一些常數:
private static final String URL = "https://www.baeldung.com/contact";
private static final String LABEL_XPATH = "//label[contains(text(),'Your Name')]";
private static final String LABEL_TEXT = "Your Name*";
private static final String INPUT_XPATH = "//label[contains(text(),'Your Name')]//input";
然後我們加入一個測試方法來確認getText()
傳回的文字與可見文字「 Your Name*”
完全匹配:
@Test
public void givenBaeldungContactPage_whenFoundLabel_thenContainsText() {
driver.get(URL);
WebElement inputElement = driver.findElement(By.xpath(LABEL_XPATH));
assertEquals(LABEL_TEXT, inputElement.getText());
}
4.2.測試不可見文本
此外,我們還注意到**input
元素沒有可見文本,因此,當我們對此元素運行 getText() 方法時,我們期望一個空String
** 。我們加入另一個測試方法來確認這一點:
@Test
public void givenBaeldungContactPage_whenFoundNameInput_thenContainsText() {
driver.get(URL);
WebElement inputElement = driver.findElement(By.xpath(INPUT_XPATH));
assertEquals("", inputElement.getText());
}
現在我們了解了getText(),
我們回顧一下getAttribute().
5. 尋找屬性值getAttribute()
現在我們檢查getAttribute()
在 Web 元素上的用法。這次我們關註名稱為“your-name”.
它有許多屬性,例如size, maxlength, value, type,
和name
。 Web 元素上的getAttribute()
方法應傳回與作為方法參數傳遞的屬性關聯的值,前提是 Web 元素上存在此類屬性。如果不存在這樣的屬性,則該方法傳回null
值。
例如,如果我們查看label
元素的 HTML 摘錄,我們會注意到input
元素有一個值為“your-name”
的屬性name
和另一個值為 400 的屬性maxlength
。
在編寫涉及檢查這些屬性的測試時,我們使用getAttribute
方法。我們首先為要檢查的值定義常數:
private static final String INPUT_NAME = "your-name";
private static final String INPUT_LENGTH = "400";
5.1.測試取得屬性值
讓我們新增幾個測試來檢查名為name
和maxlength
的屬性的屬性值:
@Test
public void givenBaeldungContactPage_whenFoundNameInput_thenHasAttributeName() {
driver.get(URL);
WebElement inputElement = driver.findElement(By.xpath(INPUT_XPATH));
assertEquals(INPUT_NAME, inputElement.getAttribute("name"));
}
@Test
public void givenBaeldungContactPage_whenFoundNameInput_thenHasAttributeMaxlength() {
driver.get(URL);
WebElement inputElement = driver.findElement(By.xpath(INPUT_XPATH));
assertEquals(INPUT_LENGTH, inputElement.getAttribute("maxlength"));
}
5.2.測試取得不存在屬性的值
接下來,我們寫一個測試來確認當我們使用getAttribute()
來尋找不存在的屬性X
時,它會傳回一個null
值:
@Test
public void givenBaeldungContactPage_whenFoundNameInput_thenHasNoAttributeX() {
driver.get(URL);
WebElement inputElement = driver.findElement(By.xpath(INPUT_XPATH));
assertNull(inputElement.getAttribute("X"));
}
六、結論
在本文中,我們學習如何使用 Selenium WebDriver 和 Java 來取得網頁上的可見文字和 Web 元素的屬性值。 getText()
僅在瀏覽器上查看網頁時顯示元素上可見的純文本,而getAttribute()
允許我們獲取 Web 元素上許多不同屬性的值。
一般流程是使用 Selenium 選擇器來識別感興趣的 Web 元素,然後使用getText()
或getAttribute()
方法之一來獲取有關 Web 元素的更多詳細資訊。
我們還添加了一些範例測試來示範這些方法在自動化測試中的用法。與往常一樣,本文的源代碼可以在 GitHub 上找到。