以编程方式找到硒网络元素的定位器

时间:2018-09-11 16:10:45

标签: java selenium selenium-webdriver xpath automation

我在做什么

我是Selenium的新手,请尝试一下,因为如果我精通使用Selenium来测试公司的Web应用程序,我的老板可能会从事一些项目。我进行了一些研究,以找出困扰使用Selenium的Web测试人员的主要问题,其中一个问题是可靠地轻松找到Webelements的定位器。为了解决这个问题并使我的生活更轻松,我建立了一个简单的程序来接收定位器(xpath,className等),并反复尝试其中的每个定位器。

那是什么问题?

现在,一旦有了每种可能的定位器,我就有了一个不错的解决方案,我需要一种快速(最好是较少人工的方式)来获取这些定位器的方法。到目前为止,我一直在使用f12 chrome开发人员工具检查webelements,然后将相关信息手动复制粘贴到该方法中:

Webdriver驱动程序=新的Webdriver; driver.findelement(By.id(“ id粘贴在这里”));

但是,由于我还没有真正深入研究网页设计,因此手动查找ID和内容以及必须阅读所有HTML内容非常困难且令人困惑,因此Javascript CSS XML和HTML对我来说还是相对较新的。我知道一些(非常)基础知识,但是我找不到适合设计良好的网站的方法。

我想要的

能够单击“检查元素”之类的内容,并与该Web元素的定位符列表打招呼。通常,对我而言,最简单的方法是右键单击该元素的突出显示的HTM1,然后选择“复制Xpath”,但是自动生成的xpath表达式并非始终是定位元素的最佳方法。我在这里找到了类似的问题来解决此问题:

Selenium 2 : finding web element locators programatically

但是,这个问题不符合我的需求,因为它在灵活的xpath定位器中更具体,并且纯粹以编程方式完成所有工作。同样,提供的答案是“使用开发人员工具”和“没有其他工具”。我愿意尝试制作一个简单的工具,但我需要知道从哪里开始。我想要的是一种简单的方法,可以单击或以其他方式选择/以编程方式记录Webelement的定位器和/或获得一个简单的消息框,该框可在列表中找到我可能的ID,定位器,类名,可能的xpath。我想这样做,所以我可以将消息框中的文本粘贴或记录消息复制到需要标识Web元素的代码中。

好主意,但我从哪里开始?

我的问题是我不知道从哪里开始。我认为我必须学习一些编程方法,然后再学习HTML,以便我可以解析出定位符,但是我需要指导,因为这是广泛的方法,实际上可能并不是我所需要的。因此,我问,为了能够一次轻松地看到一个webElement的所有可能的定位器,我需要学习/做什么。对于如何学习/创建一个简单的工具可以帮助我(可能还有很多其他人)克服这一问题的建议,我持开放态度。

1 个答案:

答案 0 :(得分:1)

一定程度上,您可以使用高质量的定位器的唯一方法就是手工制作它们。浏览器扩展中有大量的CSS选择器生成器工具,可让您单击元素并以CSS或XPath的形式获取自动生成的定位器。尽管很大,但最终会通过这样的方法得到非常冗长而脆弱的选择器。

这些工具绝对有用,因为您可以将它给您的内容作为基准,然后逐渐减少直到它变成您需要的冗长程度,同时尽可能少地依赖无关的元素。在最佳情况下,您可以使用firefox或chrome的元素检查器工具快速移动到DOM中的元素,并且如果您的元素使用诸如id之类的唯一属性,那么通常就需要这些。 (如果应用程序使用jquery,则可以根据您的jquery版本执行$("locator") $$("locator") $j("locator")之一来轻松地使用javascript控制台测试定位器)

弄清楚定位器永远不会令人烦恼,但它变得容易得多,并且从长远来看,我认为这将提高您的生产率,因为现在可以工作的定位器可以并且偶尔会由于测试中的应用程序经过开发修订而停止工作,并且找出其不同之处本身就是调试难题。因此,最大程度地减少由于被测应用程序的更改而导致定位器损坏的发生的一部分,是使手动检查dom并创建尽可能在位置上独立的定位器变得更加舒适。我所说的与位置无关的是针对不变的属性,并且不依赖于元素层次结构或同级元素的序数值(对于列表项)(随着UI的修改而改变)。

您用来定位目标的每个要素都是一种责任,并且会导致整体定位器的脆弱性,但是无法完全避免这种情况。人性化的感觉使您可以根据需要尽可能地冗长,同时尽可能简洁以拥有一个强大而功能强大的定位器