当前位置: 首页 > 面试题库 >

如何为与Selenium一起使用的ExtJS查找页面上元素的唯一选择器?

康元凯
2023-03-14
问题内容

我在Firefox Webdriver上使用Selenium来处理具有唯一CSS
ID(在每次加载页面时)的页面上的元素,但是ID每次都会更改,因此无法使用它们来查找元素。这是因为该页面是使用ExtJS构建的Web应用程序

我正在尝试使用Firebug获取元素信息。

我需要找到一个唯一的xPath或选择器,以便可以使用Selenium分别选择每个元素。

当我使用Firebug复制xPath时,得到的值是这样的:

//*[@id="ext-gen1302"]

但是,下次加载页面时,它看起来像这样:

//*[@id="ext-gen1595"]

在该页面上,每个元素都具有此ID格式,因此无法使用CSS ID查找该元素。

我想获得xPath,即它在DOM中的位置,但是Firebug将仅返回ID xPath,因为它对于该页面实例是唯一的。

/html/body/div[4]/div[3]/div[4]/div/div/div/span[2]/span

我如何获得Firebug(或其他可以以类似速度运行的工具)给我一个唯一的选择器,即使在外部ID更改后,该选择器仍可用于使用Selenium查找元素?


问题答案:

ExtJS UI自动化测试的另一个受害者,这是我专门用于测试ExtJS的技巧。(但是,这不会回答您标题中描述的问题)

提示1: 永远不要使用像这样的不可读的XPath
/div[4]/div[3]/div[4]/div/div/div/span[2]/span。源代码的微小更改可能会导致DOM结构更改。这将导致巨大的维护成本。

提示2: 利用有意义的自动生成的部分ID和类名。

例如,该
ExtJS的电网例如:By.cssSelector(".x-grid-view .x-grid- table")将方便。如果有多个网格,请尝试为它们建立索引或找到可识别的祖先,例如By.cssSelector("#something- meaningful .x-grid-view .x-grid-table")

提示3: 在源代码中创建有意义的类名。ExtJS提供cls并提供tdCls了自定义类名,因此您可以添加cls:'testing-btn- cancel'源代码,并通过进行获取By.cssSelector(".testing-btn-cancel")

Tip3 是最好的也是最后一个。如果您没有源代码,请与您的经理联系,Selenium
UI自动化对于那些可以修改源代码的人确实应该是开发人员的工作,而不是像最终用户那样的测试人员。



 类似资料:
  • 我有一个应用程序,它需要硒导航到下一页,并验证如果需要的信息找到,它没有找到比回到同一页,比点击下一个用户信息,并验证所需的信息找到,这继续,直到我们有用户链接。 我的过程:我已经创建了所有用户链接的列表来运行Enhanced for循环。现在,当用户点击第一个用户链接时,如果找不到selenium的信息会返回到同一页面,当用户尝试点击第二个用户时,它会给出异常“org”。openqa。硒。Sta

  • 问题内容: 我正在使用Selenium,需要获取控件的ID,但是ID是动态的,我无法获取。 数字1122是动态的,并且其他按钮的开头相同。 问题答案: 我已经多次回答类似的问题,您可能想看看。 ExtJS页面很难测试,尤其是在查找元素时。 以下是一些我认为有用的提示: 永远不要使用动态生成的ID。喜欢 永远不要使用绝对/无意义的XPath,例如 利用有意义的自动生成的部分ID和类名。(因此,在我的

  • 我试图自动化YouTube搜索,点击搜索结果,然后跟随右侧的推荐视频。我写的代码进入youtube,进行搜索,点击视频,视频就会在浏览器上打开。但是,我不能带它点击其中一个推荐的视频。 问题似乎在于,当我使用从右边获取推荐视频元素的列表时,我得到的是上一页的列表(当我第一次输入单词并获得搜索结果时)。 当我使用直接转到视频链接时,代码确实可以正常工作,而不是先进行搜索。 所以当我点击(最后一行)时

  • 问题内容: 在最近的一次采访中有人问我这个问题。 您将获得一个包含一百万个元素的数组。除了一个元素外,所有元素都是重复的。我的任务是找到独特的元素。 我的做法是要经过在整个数组循环,然后创建一个索引作为数组中和的数组中出现的次数。然后再次遍历我们的地图,并返回值为1的索引。 我说我的方法会花费时间。面试官告诉我要以低于复杂度的方式对其进行优化。我说过,我们不能,因为我们必须遍历具有一百万个元素的整

  • 问题内容: 我有能够反映不同的状态,由用户(触发元件,等)或由所述服务器(操作,等等)。 我可以定位状态已更改的元素,但似乎找不到基于所讨论元素的状态定位DOM中其他元素的方法。 例: 或者只是在服务器端使用适当的样式呈现元素。 是否有CSS选择器可让我指定应根据目标元素的状态选择哪些元素? 就像是: 那将允许我也将 目标 与CSS 没有相同父元素的元素定位 ? 问题答案: 规范问题的一般答案 如

  • 我正在编写一个可重用的代码来寻找自动化测试的元素。在上面的代码中,可以通过两种方式找到元素,我可以根据或通过文本查找它;但是我在硒中找不到任何东西,我可以用我想要的方式找到元素。 我正在使用“find_element”来查找元素,但是没有任何东西可以传递或作为论据。 我尝试了-或 无论如何,我可以在webview上找到使用Selenium驱动程序和一些文本作为其论据的元素吗??