这是什么使一个好的硒定位器?的后续行动。
我一直在考虑静态地检测CSS选择器的复杂性。
我使用的范围是测试自动化和网刮,选择可靠的CSS选择器非常重要,尽可能减少对UI/标记/布局更改的依赖。
目前,我可以通过css-selector-parser解析CSS选择器的“深度”,并简单地计算节点数。如果节点数超过5个,我的结论是这是一个潜在的复杂CSS选择器。这背后的原因是,选择器在路径中拥有的节点越多,就越依赖于页面的HTML结构--越脆弱。例如,这个CSS选择器将被视为“脆弱”(6个节点):
.content > table > tbody > tr:nth-child(2) > td.cell > input#email最后,我正在考虑开发一个度量,其中每个选择器将得到一个特殊的“分数”值,它将衡量一个选择器是否更坚固、更耐用。受著名代码复杂性度量(如圈复杂度或维修性指数 )的启发。
您会考虑哪些参数来确定CSS选择器是否能够抵抗更改?什么使一个可靠的CSS定位器?
bootstrap类将是错误定位器的信号。ng-scope或ng-binding类)id或name属性可能是可取的发布于 2017-06-26 20:14:16
您会考虑哪些参数来确定CSS选择器是否能够抵抗更改?什么使一个可靠的CSS定位器?我会考虑一些因素:
首先,基本内容是:
然后..。
data-属性标识符div div div:nth-child(number)或xpath[]id或name )和限定标识符table、td或tr,则是否在一个表中使用?span和div ),而不对它们进行限定标识符最困难的是,要知道这些因素中的每一个都有多大的权重。有些将受到开发和ux框架使用的严重影响,在某些情况下与其他情况或多或少相关。
判断元素权重和可预见性的一种方法是逆向工程和检查由于DOM更改而导致的过去的测试中断,以查看关系。在实践中,我发现在提交代码之前,作为devs修复测试,很难做到这一点。像谷歌这样的大公司也许能够更好地研究这个问题。
同样重要的是要区分变化的应用程序代码和具有这种复杂性的自动化选择器。对给定选择器的排序或评级可能为自动开发用于自动测试的选择字符串提供良好的反馈,但不适合ux组开发的页面内容本身。
发布于 2017-06-27 14:43:04
我已经能够降低您描述的复杂性如下:
将代码视为数据,将数据视为代码;使用集合。这避免了将复杂路径定义到网页中的使用。有了集合和适当的过滤技术,我们只能依靠页面上看到的文本。
var day = 12;
var calendar = calenderElement.Click(); //opens the calendar
//finds the link with the number 12 (in the text) for each link.
var ele= calendar.FindElements.By.TagName("a").Select(i=>i.Text == day).First();
ele.Click() //sets the date in the calendar这种代码样式应该可以用于C#、Java和Javascript解决方案。这三种语言都支持集合查询,FindEements将从当前的IWebElement (如果选择器不是全局的)工作。通过使用当前元素中的FindElement,可以进行精细的优化演练,以达到所需的目的。
如果上面的代码被重构到我们想要的那一天注入.那么我们就有了一个可重复使用的部件。
这允许我们以不同的方式来思考网页。我们真正需要的是ID、链接或CSS作为我们的主要检索点。从这里,我们使用集合过滤和或FindEement(s)从这些点,过滤我们想要的东西。最好的部分是它只能基于我们看到的文本,而不是隐藏的属性等等。然而,如果我们需要更细粒度的搜索,所有属性也可以以相同的方式进行过滤。
我们知道类选择器会返回(最常见的方式是太多的元素),所以让我们根据我们看到的仅使用classNames的文本在一个过滤器中拨号。
var specificTextWanted = "Something we see";
//too many elements here //filtered here
var theSingleElement = wd.FindElements(By.ClassName("alpha").Where(i=>i.text == specificTextWanted).First();我们现在可以使用基于返回集合的基于文本的筛选来绕过复杂的选择器。这甚至对于动态内容也很好,但是有时会在Where子句中抛出一个陈旧的元素引用,它很容易修复(尝试、捕捉)并忽略元素,毕竟,它不再存在了!
https://sqa.stackexchange.com/questions/28027
复制相似问题