Selenium Webdriver:使用xpath是专业的做法吗?

我正在使用 selenium 和 java 测试一个 web 应用程序。我一直避免使用 xpath,就像它是一种疾病一样。不幸的是,我被困在一个深埋在桌子深处的顽固的网络元素上,不幸的是没有 id 或 class。我尝试了一切,甚至邀请了我的曾曾祖父母,但不……没有任何效果,除了 xpath……见下文。

我试过:className, name, cssSelector etc with eg

driver.findElement(By.className("kujes")).click();

这是有效的。

driver.findElement(By.xpath("/html/body/div[7]/div[3]/div/div[2]/div[1]/div[2]/div/div/div/div/div[2]/div/div[1]/div/div/div[6]/div/div[2]/div[2]/div/table/tbody/tr[1]/td[3]")).click();

在我的工作中,我不想要任何不专业的东西。所以,我的问题是 xpath 是否可靠并且是一种好的做法?使用xpath专业吗?


catspeake
浏览 244回答 2
2回答

侃侃无极

driver.findElement(By.xpath("/html/body/div[7]/div[3]/div/div[2]/div[1]/div[2]/div/div/div/div/div[2]/div/div[1]/div/div/div[6]/div/div[2]/div[2]/div/table/tbody/tr[1]/td[3]")).click();上述方法是非常非常糟糕的做法。永远不要在你的 xpath 中使用索引。它变得非常脆弱,即使目标应用程序发生很小的变化,每次都会破坏。尝试要求开发人员将 ID 添加到该对象。

尚方宝剑之说

这取决于具体情况。最终目标是找到唯一的选择器,并且在发生重大变化之前永远不会改变。首先,您可以尝试使用唯一的 id 或类名。然后我们可以玩css选择器来查找,具有属性、类名、id 和组合的元素。作为另一个元素的子元素的元素,作为另一个元素的下一个兄弟元素的元素。您正在使用绝对 xpath,它是不可读的并且正在更改。使用绝对 xpath 是完全不专业的。driver.findElement(By.xpath("/html/body/div[7]/div[3]/div/div[2]/div[1]/div[2]/div/div/div/div/div[2]/div/div[1]/div/div/div[6]/div/div[2]/div[2]/div/table/tbody/tr[1]/td[3]")).click()您可以使用相对 xpathdriver.findElement(By.xpath("//table[@id='somevalue']//td[text() = 'Name']]/preceding-sibling::td")).click()很少有只有 XPath在 selenium 中才有可能的情况查找元素的父元素查找元素的前一个兄弟使用 innerText 查找元素查找定位器的第 n 个元素上述情况对于 css 选择器是不可能的,而 xpath 是找到这些元素的唯一直接方法。您也可以使用 jquery 选择器和 javascript 执行器间接实现这些。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java