9K WebDriver – 定位元素:第 2 部分(按className,linkText,partialLinkText)

原文: https://javabeginnerstutorial.com/selenium/9k-webdriver-locating-elements-2/

朋友! 让我们今天更深入地研究一下定位元素的更多策略。 在这篇文章中,我们将重点放在

  • className
  • LinkText
  • partialLinkText

按类名称定位

类名称不过是用于设置 Web 元素样式的 CSS 类名称。 重要的是要注意页面上的许多 Web 元素可能具有相同的className。 在这种情况下,可以使用findElements方法,并且可以为结果建立索引。 请参考通过tagName策略定位(解释以及先前文章中提供的示例)。 如果我们有一个具有唯一className的元素,或者被测元素是该页面中使用该className的第一个元素,则findElement将执行此任务。

语法driver.findElement(By.className("element_class_name"))*

说明:找到具有匹配 CSS 类名称的第一个元素。

示例:让我们找到 gmail 帐户创建页面的“手机”文本框。

右键单击文本框,然后选择检查元素以获取相应的 HTML 代码。 我们可以看到“input”标签包含class ="i18n_phone_number_input-inner_input"。 让我们继续使用此类名称查找“手机”文本框,以进行进一步的交互。

代码:

  1. driver.findElement(By.className("i18n_phone_number_input-inner_input"));

Locating by ClassName

通过linkText定位

当您想与超链接进行交互时,linkText非常有用。 使用该链接在网页上显示的实际文本。 那有多容易?

语法driver.findElement(By.linkText("hyperlink_text");

说明:找到具有匹配链接文本的第一个超链接。

示例:让我们找到在 gmail 帐户创建页面底部提供的超链接“了解更多信息”。

代码:

  1. driver.findElement(By.linkText("Learn more"));

Locating by LinkText

通过partialLinkText定位

PartialLinkText也用于与超链接进行交互,与linkText定位策略非常相似。 此方法不提供部分完整链接,而是提供链接显示的完整文本。 因此,可以将链接文本的一部分作为匹配条件。

语法driver.findElement(By.partialLinkText("hyperlink_partial_text");

说明:找到第一个超链接,其中包含指定的部分链接文本。

示例:让我们在 Gmail 帐户创建页面的“选择用户名”文本框下方找到超链接“我更喜欢使用我当前的电子邮件地址” - 文本:我更喜欢

代码:

  1. driver.findElement(By.partialLinkText("I prefer to"));

Locating by partialLinkText

概览

让我们看一个实现上述三种定位器类型的测试用例。

场景

  1. 打开 Firefox 浏览器。
  2. 导航到 Google 帐户创建页面
  3. 通过className找到手机文本框
  4. 输入“9496543210”作为手机号码
  5. 通过linkText找到“了解详情”超链接
  6. 链接超链接
  7. 找到“我更喜欢使用当前的电子邮件地址”超链接和partialLinkText
  8. 将完整的链接文本打印到控制台进行验证

此方案的 JUnit 代码是,

  1. import java.util.concurrent.TimeUnit;
  2. import org.junit.After;
  3. import org.junit.Before;
  4. import org.junit.Test;
  5. import org.openqa.selenium.By;
  6. import org.openqa.selenium.WebDriver;
  7. import org.openqa.selenium.WebElement;
  8. import org.openqa.selenium.firefox.FirefoxDriver;
  9. public class ElementLocatorTest2 {
  10. //Declaring variables
  11. private WebDriver driver;
  12. private String baseUrl;
  13. @Before
  14. public void setUp() throws Exception{
  15. // Selenium version 3 beta releases require system property set up
  16. System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\"
  17. + "Selenium\\geckodriver-v0.10.0-win64\\geckodriver.exe");
  18. // Create a new instance for the class FirefoxDriver
  19. // that implements WebDriver interface
  20. driver = new FirefoxDriver();
  21. // Implicit wait for 5 seconds
  22. driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  23. // Assign the URL to be invoked to a String variable
  24. baseUrl = "https://accounts.google.com/SignUp";
  25. }
  26. @Test
  27. public void testPageTitle() throws Exception{
  28. // Open baseUrl in Firefox browser window
  29. driver.get(baseUrl);
  30. // Locate Mobile phone text box by className and
  31. // assign it to a variable of type WebElement
  32. WebElement mobileNum = driver.findElement(By.className("i18n_phone_number_input-inner_input"));
  33. // Clear the default placeholder or any value present
  34. mobileNum.clear();
  35. // Enter/type the value to the text box
  36. mobileNum.sendKeys("9496543210");
  37. // Locate 'Learn more' hyperlink by link text
  38. WebElement link1 = driver.findElement(By.linkText("Learn more"));
  39. // Click on 'Learn more'
  40. link1.click();
  41. // Locate hyperlink by partial link text
  42. WebElement link2 = driver.findElement(By.partialLinkText("I prefer to"));
  43. // Printing the complete link text to console
  44. System.out.println("Complete link text: " + link2.getText());
  45. }
  46. @After
  47. public void tearDown() throws Exception{
  48. // Close the Firefox browser
  49. driver.close();
  50. }
  51. }

执行结果

注释清楚地提供给每一行代码,因此很容易解释。

Console output

在 JUnit 窗格中,绿色条显示测试用例已成功执行。 输出将打印到控制台,以确认仅提供子文本“我更喜欢”作为 partialLinkText,即可访问“我更喜欢使用当前的电子邮件地址”超链接。

Output

该图像的左半部分显示输入的电话号码,右半部分显示在 Firefox 浏览器中执行的最终输出。 点击“了解详情”链接后,我们将重定向到相应的页面。

是时候再休息一次了。 在接下来的文章中,准备好消化更多的信息,因为我们将研究两种有效的元素定位技术。

享受这一天!