首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >人工智能在UI自动化测试中的应用

人工智能在UI自动化测试中的应用
EN

Stack Overflow用户
提问于 2018-04-23 15:03:15
回答 3查看 1.2K关注 0票数 0

我目前正在做一个项目,其中元素的xpath不断变化。在UI显示级别,UI没有太多可见的变化,但是DOM元素不断变化。

我正在考虑一种更好的方法来处理测试用例中由于DOM结构的微小变化而导致的失败。我目前正在使用Selenium和TestNg框架进行UI自动化测试。

任何关于替代方法的建议或方向都将是有帮助的。

EN

回答 3

Stack Overflow用户

发布于 2018-04-23 15:55:10

您是否遵循Selenium 贡献者建议的locators顺序:如果没有,请遵循以下顺序:

  1. ID
  2. name
  3. className
  4. linkText
  5. partialLinkText
  6. tagName
  7. cssSelector
  8. XPath.

注意:在大多数情况下,cssSelector可以替代Xpath,但是Xpath具有cssSelector所不具备的优势。

有关更多参考信息,请访问此,因此链接:Css vs Xpath

票数 2
EN

Stack Overflow用户

发布于 2018-04-23 15:17:43

我的建议是: 1.尝试对特定的元素使用不同的定位器,比如selector1,selector2,selectorN。如果selector1在DOM中不可用,则控件不会抛出错误,而是搜索selector2,依此类推。2.使用显式等待

票数 0
EN

Stack Overflow用户

发布于 2018-04-23 16:14:53

我使用By.CSS选择器而不是xpath,因为它们不太容易在DOM中发生变化。

因此,对于这个示例dom:

代码语言:javascript
复制
<div class="smc-login-container">
<form role="form" action="/login.html" method="POST" name="login" class="ng-pristine ng-valid">
    <!-- Username -->
    <label for="username">User ID:</label>
    <input type="text" class="smc-login-control aftLoginUsernameField" id="username" name="username">

    <!-- Password -->
    <label for="password">Password:</label>
    <input type="password" class="smc-login-control aftLoginPasswordField" id="password" name="password">

    <!-- Cross site scripting token -->
    <input type="hidden" id="_csrf" name="_csrf" value="efaa05c4-77a8-443d-9484-51e8c9795c28">

    <!-- Sign In Button -->
    <button id="signIn" class="btn btn-lg btn-block smc-login-button aftLoginSignInButton">
        Sign In
    </button>
</form>

这些选择器可以工作:

示例1.查找按钮、元素类型和类

代码语言:javascript
复制
WebElement element = webDriver.findElement(By.cssSelector("button.btn"));

示例2.查找按钮,直接子项而不是子项

使用完整的DOM,因此使用表单元素:

代码语言:javascript
复制
WebElement element = webDriver.findElement(By.cssSelector("div > form > button"));

不使用表单元素:

代码语言:javascript
复制
WebElement element = webDriver.findElement(By.cssSelector("div button"));

示例3.查找用户名标签后面的输入,属性值然后是它的同级(+)

代码语言:javascript
复制
WebElement element = webDriver.findElement(By.cssSelector("label[for='username'] + input"));

示例4.查找密码输入和按钮,或(逗号)返回多个元素

代码语言:javascript
复制
List<WebElement> elements;
elements = webDriver.findElements(By.cssSelector("input.smc-login-control.aftLoginPasswordField , .btn"));
elements.get(0).sendKeys("my password");
elements.get(1).click();

密码示例5.查找用户名输入,具有类属性,但没有属性=‘password’:

代码语言:javascript
复制
WebElement element = webDriver.findElements(By.cssSelector("input[class]:not([name='password'])"));

我做的另一件事是使用更通用的模式,它可以找到多个项目。我发现这些项总是以相同的顺序找到,因此我只需使用数组索引就可以访问我想要的项(如示例4所示)。

最后,如果DOM有动态值,我发现我可以使用特定的稳定模式来找到具有相同动态值的父元素,从而提取它,然后重用它来找到我真正想要的其他元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49975177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档