WebElement.equals() 方法如何检查相等性?

ee *_*pse 5 java selenium xpath

我有超过 1 个 XPath 指向一个 web 元素,我想确定两个元素是否等效(即,如果我在两个 web 元素上执行操作 sendKeys() 或 click(),则操作将在同一个 web 元素上执行) 目前我正在使用以下方法检查相等性:

    WebElement element1 = driver.findElement(By.xpath(".//*[@id='ap_email']"));
    WebElement element2 = driver.findElement(By.xpath(".//*[@type='email']"));


    System.out.println(element1.equals(element2));
Run Code Online (Sandbox Code Playgroud)

只要两个 XPath 都指向同一个元素,这将返回 true。

但是,我不确定该方法如何确定相等性?是否存在两个 Web 元素实际上相同的情况(即,对它们执行的任何操作都将在同一个 Web 元素上执行)但方法显示它们不同?或相反亦然?

我正在尝试开发一种万无一失的方法来确定两个 Web 元素的相等性。

我正在使用 Java 和 Selenium。

Flo*_* B. 2

但是,我不确定该方法如何确定相等性?

驱动程序HTMLElement为文档中遇到的每个对象生成一个引用,并始终为HTMLElement对象返回相同的引用。

该引用存储在WebElement.id客户端的属性中,与定位器使用的 id 属性无关。

因此,要确定两者之间的相等性WebElement,客户端只需测试存储在WebElement.id.

是否存在两个 Web 元素实际上相同但方法显示它们不同的情况?

从技术上讲,不,这种情况永远不会发生,如果是这种情况,那将是一个严重的问题。

但这在某种程度上取决于您的意思。例如,一个按钮在两个不同时刻可能看起来相同,但可能已被相同的按钮替换,从而生成新的引用。当页面或某些部分重新加载时就会出现这种情况:

  driver.get("http://stackoverflow.com/");

  WebElement elementA = driver.findElement(By.cssSelector("#logo"));
  WebElement elementB = driver.findElement(By.cssSelector("#logo"));

  boolean same1 = elementA.equals(elementB);  // return true

  elementB.click();  // reloads the page, all the previous web element are now obsolete

  WebElement elementC = driver.findElement(By.cssSelector("#logo"));

  boolean same2 = elementA.Equals(elementC);  // return false
Run Code Online (Sandbox Code Playgroud)