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

标签 java selenium xpath

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

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


    System.out.println(element1.equals(element2));

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

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

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

我正在使用 Java 和 Selenium。

最佳答案

However, I am unsure how the method determines equality?

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

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

因此,为了确定两个 WebElement 之间的相等性,客户端只需测试存储在 WebElement.id 中的引用即可。

And are there any circumstances where the two web elements are in fact the same but the method shows they are different?

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

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

  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

关于java - WebElement.equals() 方法如何检查相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39002436/

相关文章:

selenium - Xpath 有效,可以在 Elements 和 Console 中找到,但在运行应用程序时找不到

Python- Selenium : Chrome headless setting does not work with "WebDriverWait"

Xpath 找出具有任何文本的元素

XSLT for-each,其中 position() = 1

python - Selenium 脚本不打印 XPath 值

c# - 如何使用 Selenium 找到所有元素并将它们放入列表中?

java - 获取大于system.currentTimeMillis值的rand值的方法

java - 如何解析可变空格分隔的文本

java - Jsoup 将 HTML 属性的输出从单引号更改为双引号

java - 如何从将应用程序注册到systemd的Java gradle项目中获取deb包