java - 以编程方式查找 selenium 的 webelements 定位器

标签 java selenium selenium-webdriver xpath automation

我在做什么

我是 Selenium 新手,正在尝试它,因为如果我熟练使用 Selenium 来测试我们公司的 Web 应用程序,我的老板可能会有我可以从事的项目。我做了一些研究来确定困扰使用 Selenium 的网络测试人员的主要问题,其中之一是轻松可靠地找到网络元素的定位器。为了解决这个问题并使我的生活更轻松,我设置了一个简单的程序来接收定位器(xpath、className 等)并迭代地尝试其中的每一个。

那问题是什么?

既然我已经有了一个很好的解决方案来尝试每个可能的定位器,我需要一种快速(最好是更少手动)的方法来获取这些定位器。到目前为止,我一直在使用 f12 chrome 开发者工具来检查 webelement,然后手动将相关信息复制粘贴到方法中:

Webdriver 驱动程序 = 新的 Webdriver; driver.findelement(By.id("id 已粘贴到此处"));

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

我想要什么

是为了能够单击“检查元素”之类的内容,并看到该 Web 元素的定位器列表。通常对我来说最简单的方法是右键单击该元素的突出显示的 HTMl 并选择“复制 Xpath”,但自动生成的 xpath 表达式并不总是最适合定位元素。我在这里发现了一个处理此问题的类似问题:

Selenium 2 : finding web element locators programatically

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

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

我的问题是我不知道从哪里开始。我想我必须学习某种方法来对我的鼠标进行编程,然后学习足够的 HTML,以便我可以解析定位器,但我需要指导,因为这太广泛了,而且可能实际上不是我所需要的。因此我问,我需要学习/做什么才能轻松地立即查看 webElement 的所有可能的定位器。我愿意接受有关如何学习/创建一个简单工具来帮助我(可能还有很多其他人)克服这个问题的建议。

最佳答案

在某种程度上,获得高质量定位器的唯一方法就是手工制作它们。有很多浏览器扩展形式的 css 选择器生成器工具,可以让您单击元素并获得 css 或 xpath 形式的自动生成的定位器。虽然很大,但通过这样的方法,你最终会得到非常冗长和脆弱的选择器。

但是,这些工具绝对有用,因为您可以将其提供的内容作为基线,然后开始削减,直到达到您需要的冗长程度,同时依赖尽可能少的不相关元素。在最好的情况下,您可以使用 firefox 或 chrome 的元素检查器工具快速移动到 DOM 中的元素,如果您的元素使用像 id 这样的唯一属性,那么这通常就是您所需要的。 (如果应用程序使用 jquery,则可以通过执行以下操作之一轻松地使用 javascript 控制台测试定位器 $("locator") $$("locator") $j("locator") 取决于您的 jquery 版本)

虽然弄清楚你的定位器永远不会停止烦人,但它变得更加容易,并且在我看来,从长远来看会提高你的生产力,因为现在工作的定位器可能并且偶尔会在测试中的应用程序经历开发修订时停止工作,并且找出它的不同之处本身就是一个调试挑战。因此,为了最大限度地减少由于被测应用程序的更改而导致定位器损坏的情况,部分方法是手动检查 dom 并创建尽可能位置独立的定位器。我所说的位置独立是指定位不会改变的属性,并且不依赖于元素层次结构或同级元素的序号值(在列表项的情况下),这些值可能会随着 UI 的修改而改变。

您用来定位目标所依赖的每个元素都是一种负担,并会导致整个定位器的脆弱性,但不可能完全避免这种情况。这种人性化的风格让您可以根据需要尽可能冗长,同时尽可能简洁,以获得强大且实用的定位器

关于java - 以编程方式查找 selenium 的 webelements 定位器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52280114/

相关文章:

java - 统计socket编程中接收到的字符数

java - Java中日期到整数的转换

python - Selenium 使用 Send_keys 自动提交表单?

java - 如何到达appium中滚动条的末尾?

java - 如何从 GAE java blobstore 上传获取文件名

ruby-on-rails - 无法连接到 chromedriver http://127.0.0.1:9515 (Selenium::WebDriver::Error::WebDriverError)

python - Phantomjs 切换到错误的 iframe

selenium - 无法将 Firefox v52.0 与 Protractor 一起使用

python - 如何在不关闭浏览器的情况下在 Google Colab 上使用 Selenium?

java - 在 Selenium (WebDriver) 中按坐标查找元素