使用CSS来定位适合硒元素的样式



我目前正在学习Selenium WebDriver作为我实习的一部分。我的导师希望我学习它,建立一个概念的证明并展示它,这样他们就可以在测试他们的web应用程序时开始使用它(我们使用JSF,但它与问题并不真正相关)。

我遇到的最大问题是定位具有动态ID属性的元素。由于ID可以更改,因此没有一致的方法来标识元素。我要么使用XPath,要么提取所有输入元素并进行进一步过滤,以创建所需元素的映射。

我和一个从事自动化工作的朋友聊过,他提出创建空CSS类来标识元素。例如,给定标签:

<input id = "name"... class="... qa_name">

我可以打电话给driver.findElement.(By.cssSelector(".qa_name"))来定位它。这对于测试人员来说是非常方便的,因为他们有一种确定的方法来定位页面上的元素。

这有什么问题吗?我知道它会起作用,我想推荐这样做,但我担心的是:

1)由于额外的CSS没有做任何适合页面的事情,页面将需要更长的加载时间。

2)从样式上讲,这不是合适的CSS,因为它对页面的外观没有任何影响。

我在程序员StackOverflow上问了一个类似的问题,没有运气,所以我希望我能在这里得到答案。谢谢!

我能感受到你的痛苦。向测试元素添加类可能不是最佳实践。可以加name代替吗?

另一个带有动态id的选项…ID的某些部分是稳定的吗?你可以使用CSS选择器来查找字符串的开始、结束或字符串的某些部分。

假设您有一个动态ID的DIV,例如<div id="ct100_Text1_12345_Text2">,其中12345是一个动态号码。

你可以使用CSS选择器来定位ID的第一部分,使用

driver.findElements(By.cssSelector("div[id^='ct100_Text1_']"));

你可以使用CSS选择器来定位ID的最后一部分,使用

driver.findElements(By.cssSelector("div[id$='_Text2']"));

还是……你可以使用CSS选择器来定位ID的中间部分,使用

driver.findElements(By.cssSelector("div[id*='_Text1_']"));

CSS选择器是我最近才开始学习和使用的一个强大的工具。它们值得你花时间去学习。

CSS选择器参考

相关内容

  • 没有找到相关文章

最新更新