java – WebElement.equals()方法如何检查平等?
我有超过1个指向web元素的XPath,我想确定两个元素是否相同(即,如果我在两个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)); 只要两个XPath指向同一个元素,这将返回true. 但是,我不确定该方法如何确定相等性?在这种情况下,两个网络元素实际上是否相同(即,对它们执行的任何操作都将在同一个网络元素上执行)但方法显示它们不同?或相反亦然? 我正在尝试开发一种万无一失的方法来确定两个web元素的相等性. 我正在使用Java和Selenium. 谢谢 解决方法
驱动程序为文档中每个遇到的HTMLElement对象生成一个引用,并始终为HTMLElement对象返回相同的引用. 此引用存储在客户端的WebElement.id属性中,与定位器使用的id属性无关. 因此,要确定两个WebElement之间的相等性,客户端只需测试存储在WebElement.id中的引用.
从技术上讲,它永远不会发生,如果是这样的话,这将是一个严重的问题. 但这取决于你的意思.例如,按钮在两个不同时刻看起来相同,但可能已经被生成新引用的相同按钮所取代.重新加载页面或某些部分时就是这种情况: driver.get("https://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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |