为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

catspeake 2022-01-12 14:18:28
我正在使用 selenium 和 java 测试一个 web 应用程序。我一直避免使用 xpath,就像它是一种疾病一样。不幸的是,我被困在一个深埋在桌子深处的顽固的网络元素上,不幸的是没有 id 或 class。我尝试了一切,甚至邀请了我的曾曾祖父母,但不……没有任何效果,除了 xpath……见下文。我试过:className, name, cssSelector etc with egdriver.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专业吗?
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

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 添加到该对象。


查看完整回答
反对 回复 2022-01-12
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这取决于具体情况。最终目标是找到唯一的选择器,并且在发生重大变化之前永远不会改变。

首先,您可以尝试使用唯一的 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()

您可以使用相对 xpath

driver.findElement(By.xpath("//table[@id='somevalue']//td[text() = 'Name']]/preceding-sibling::td")).click()

很少有只有 XPath在 selenium 中才有可能的情况

  • 查找元素的父元素

  • 查找元素的前一个兄弟

  • 使用 innerText 查找元素

  • 查找定位器的第 n 个元素

上述情况对于 css 选择器是不可能的,而 xpath 是找到这些元素的唯一直接方法。您也可以使用 jquery 选择器和 javascript 执行器间接实现这些。


查看完整回答
反对 回复 2022-01-12
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信