Selenium UI自动化测试中的人工智能
我目前正在从事一个项目,其中元素的xpath不断变化。在UI显示级别,UI中没有太多可见的变化,但是DOM元素不断变化。Selenium UI自动化测试中的人工智能,selenium,automation,artificial-intelligence,ui-automation,Selenium,Automation,Artificial Intelligence,Ui Automation,我目前正在从事一个项目,其中元素的xpath不断变化。在UI显示级别,UI中没有太多可见的变化,但是DOM元素不断变化。 我正在考虑一种更好的方法来处理由于DOM结构的微小变化而导致的测试用例失败。我目前正在使用Selenium和TestNg框架进行UI自动化测试 任何关于替代方法的建议或指示都会有帮助。我的建议是: 1.尝试对特定元素使用不同的定位器[ 类似于selector1、selector2、selectorN。如果selector1在DOM中不可用,控件将不会抛出错误,而是搜索sele
我正在考虑一种更好的方法来处理由于DOM结构的微小变化而导致的测试用例失败。我目前正在使用Selenium和TestNg框架进行UI自动化测试
任何关于替代方法的建议或指示都会有帮助。我的建议是: 1.尝试对特定元素使用不同的定位器[ 类似于selector1、selector2、selectorN。如果selector1在DOM中不可用,控件将不会抛出错误,而是搜索selector2,依此类推 2.使用显式等待我的建议是: 1.尝试对特定元素使用不同的定位器[ 类似于selector1、selector2、selectorN。如果selector1在DOM中不可用,控件将不会抛出错误,而是搜索selector2,依此类推
2.使用显式等待您是否遵循Selenium贡献者建议的定位器的顺序:如果没有,请遵循以下顺序:
有关更多参考信息,请浏览此SO链接:您是否遵循Selenium贡献者建议的定位器的顺序:如果没有,请遵循以下顺序:
有关更多参考信息,您可以浏览此链接:我使用By.CSS选择器而不是xpath,因为它们不太容易在DOM中发生更改 因此,对于这个示例dom:
<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>
示例2.查找按钮,直接子代而非子代
使用完整的DOM,从而形成元素:
WebElement element = webDriver.findElement(By.cssSelector("div > form > button"));
WebElement element = webDriver.findElement(By.cssSelector("div button"));
不使用表单元素:
WebElement element = webDriver.findElement(By.cssSelector("div > form > button"));
WebElement element = webDriver.findElement(By.cssSelector("div button"));
示例3。在用户名标签后面查找输入,属性值为,然后是同级(+)
示例4。查找密码输入和按钮,或'd(逗号)返回多个元素
List<WebElement> elements;
elements = webDriver.findElements(By.cssSelector("input.smc-login-control.aftLoginPasswordField , .btn"));
elements.get(0).sendKeys("my password");
elements.get(1).click();
我要做的另一件事是使用一个更通用的模式,它可以查找多个项。我发现这些项总是在相同的序列中找到的,因此我可以通过使用数组索引来访问我想要的项(如示例4)
最后,如果DOM具有动态值,我发现我可以使用特定的稳定模式来查找具有相同动态值的父元素,从而提取它,然后重新使用它来查找我实际需要的其他元素。我使用By.CSS选择器而不是xpath,因为它们不太容易在DOM中发生更改 因此,对于这个示例dom:
<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>
示例2.查找按钮,直接子代而非子代
使用完整的DOM,从而形成元素:
WebElement element = webDriver.findElement(By.cssSelector("div > form > button"));
WebElement element = webDriver.findElement(By.cssSelector("div button"));
不使用表单元素:
WebElement element = webDriver.findElement(By.cssSelector("div > form > button"));
WebElement element = webDriver.findElement(By.cssSelector("div button"));
示例3。在用户名标签后面查找输入,属性值为,然后是同级(+)
示例4。查找密码输入和按钮,或'd(逗号)返回多个元素
List<WebElement> elements;
elements = webDriver.findElements(By.cssSelector("input.smc-login-control.aftLoginPasswordField , .btn"));
elements.get(0).sendKeys("my password");
elements.get(1).click();
我要做的另一件事是使用一个更通用的模式,它可以查找多个项。我发现这些项总是在相同的序列中找到的,因此我可以通过使用数组索引来访问我想要的项(如示例4)
最后,如果DOM具有动态值,我发现我可以使用特定的稳定模式来查找具有相同动态值的父元素,从而提取它,然后重新使用它来查找我实际需要的其他元素。我们已经在某些地方使用了多个选择器,但问题是大多数元素没有id和sometim在xpath中,DOM结构有一个小的变化,这会导致测试用例失败。我们已经在一些地方使用了多个选择器,但问题是大多数元素没有id,有时在xpath中,DOM结构有一个小的变化,这会导致测试用例失败。短语
更好的方法你的意思是人工智能?例如:-如果DOM结构发生微小变化,则保存按钮将或多或少处于相同的位置。跟踪事件序列并向单击事件添加元数据将有所帮助。因此,如果失败,我可以检查备用按钮并继续执行。保存按钮将或多或少处于相同的位置如果DOM中有一个小的变化,则显示相同的位置。
显然是正确的,但逻辑上/功能上/事实上是错误的。更好的方法
你指的是人工智能吗?例如:-如果DOM结构中有一个小的变化,则保存按钮或多或少会处于相同的位置。跟踪事件序列并添加g单击事件的元数据将有所帮助。因此,如果出现故障,我可以检查备用按钮并继续执行。如果DOM中有一个小的更改,则保存按钮将或多或少处于相同的位置
显然是正确的,但在逻辑/功能/事实上是错误的