Java SeleniumWebDriver:使用xpath是一种专业实践吗?
我正在使用selenium和java测试一个web应用程序。我总是避免xpath,就像它是一种疾病一样。不幸的是,我被一个顽固的web元素深深地埋在一个表中,不幸的是没有id或类。我尝试了一切,甚至邀请了我的曾祖父母,但不……除了xpath,什么都没用……见下文 我试过了:className,name,cssSelector,e.t.c.和e.gJava SeleniumWebDriver:使用xpath是一种专业实践吗?,java,selenium,Java,Selenium,我正在使用selenium和java测试一个web应用程序。我总是避免xpath,就像它是一种疾病一样。不幸的是,我被一个顽固的web元素深深地埋在一个表中,不幸的是没有id或类。我尝试了一切,甚至邀请了我的曾祖父母,但不……除了xpath,什么都没用……见下文 我试过了:className,name,cssSelector,e.t.c.和e.g driver.findElement(By.className("kujes")).click(); 这就是成功的原因 driver.findEle
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专业吗
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和组合的元素李>
- 元素,该元素是另一个元素的子元素
- 元素,它是另一个元素的下一个同级元素
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()
在selenium中,只有XPath才有可能
- 查找元素的父元素
- 查找元素的前一个同级
- 查找具有innerText的元素
- 查找定位器的第n个元素
使用css选择器无法实现上述情况,而xpath是查找这些元素的唯一直接方法。您也可以使用jquery选择器和javascript executor间接实现这些功能。根据我的经验,这取决于您所在的公司使用这两种功能的专业程度。我工作过的一个地方说“绝对没有XPath”,因为他们发现它们跨浏览器/设备不可靠。他们坚持使用CSS选择器。另一家公司只会使用XPath。就个人而言,在使用了两者之后,我更喜欢使用CSS选择器。简单。清洁的完成任务,并且在我使用过的任何浏览器/设备上都100%可靠。谢谢AJC24,但我想知道……即使没有id或类名,css选择器也能工作吗?因为我也尝试了一下,结果失败了。当然可以,但是如果元素具有
id
或class
属性,这会有很大帮助。如果你是开发人员,也许你应该考虑添加它们。如果您没有,您应该请求添加它们。例如,您可以执行以下操作:div[id=“parent”]>div>p>h2
使用CSS选择器向下遍历DOM元素,到达所需的选择器。“[…]查找[…]永不更改的选择器”-dream on:)哈哈!更新了句子