如何在 Selenium 中通过属性的部分比较来识别元素?

software testingautomation testingselenium web driver

在 Selenium 中,我们可以借助正则表达式,通过属性的部分比较来识别元素。XPath 中有一个 `contains()` 方法,它支持与属性值进行部分匹配。当处理属性值动态变化的元素时,此方法非常有用。

语法

driver.findElement(By.xpath("//tagname[contains(@attributes,"value")]"))

在 CSS 中,我们可以使用正则表达式,通过属性的部分比较来识别元素。

可能有三种情况 −

  • 使用 ^ 来定位以特定文本开头的属性。

    语法 −

    driver.findElement(By.cssSelector("tagname[attribute^="value"]"))
    
  • 使用 $ 来定位以特定文本结尾的属性。

    语法 −

    driver.findElement(By.cssSelector("tagname[attribute$="value"]"))
    
  • 使用 * 来定位包含特定文本的属性。

    语法 −

    driver.findElement(By.cssSelector("tagname[attribute*=’value’]"))
    

示例

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class PartialMatch {
   public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "C:\Users\ghs6kor\Desktop\Java\chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      String url = "https://www.tutorialspoint.com/index.htm";
      driver.get(url);
      driver.manage().window().maximize();
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      // xpath with contains() method driver.findElement(By.xpath("input[contains(@id,’gsc-i’)]"))
      .click();
      // CSS 中类名属性以 gsc 开头
      driver.findElement(By.cssSelector("input[class^=’gsc’)]"))
      .click();
      // CSS 中带有 class 属性且以 button v2 结尾的样式
      driver.findElement(By.cssSelector("button[class$=’button-v2’)]")).
      click();
      // 带有 id 属性的 CSS 包含 Selenium
      driver.findElement(By.cssSelector("input[id*=’gsc-i’)]"))
      .click();
      driver.close();
   }
}

相关文章