在我的应用程序中,同一页面中有两个“保存”按钮。我无法找到并单击第二个保存按钮。但两者都有不同的id值。但有时候测试仍然失败。有没有办法找到我想要点击的保存按钮。提前谢谢!
第一个保存按钮
<a id="saveNewUIPortButtonId" href="#" class="ui-commandlink btn btn-primary" onclick="PrimeFaces.ab({source:'saveNewUIPortButtonId',process:'saveNewUIPortButtonId uiPortFieldId uiHttpsPortFieldId',update:'uiPortGridId growl'});return false;">
<span>Save</span></a>
&#13;
对于第二个保存按钮
<a id="saveSettingsButtonId" href="#" class="ui-commandlink btn btn-primary" onclick="PrimeFaces.ab({source:'saveSettingsButtonId',process:'saveSettingsButtonId nodeNameFieldId locationLongitudeFieldId locationLatitudeFieldId hostnameFieldId dconePortFieldId systemStatusPollingIntervalFieldId systemStateItemAgeThresholdFieldId consistencyCheckRevisionQuantityFieldId consistencyCheckScheduleEnabledFieldId consistencyCheckScheduleFrequencyFieldId',update:'SystemDataPanelId growl'});return false;">
<span>Save</span></a>
&#13;
我尝试用id,因为它不同。但没有运气。测试随机失败并出现错误&#34;重复发现的元素过时了#34;。
我写了下面的JaveScript来解决这个问题。如果没有单击保存按钮,有时也会失败。谁能建议我以更好的方式点击按钮?
JavascriptExecutor javaScriptExecutor = null;
if (driver instanceof JavascriptExecutor) {
javaScriptExecutor = (JavascriptExecutor) driver;
}
javaScriptExecutor.executeScript("document.getElementById('saveSettingsButtonId').click();");
&#13;
答案 0 :(得分:0)
请使用以下Xpath标识相应的保存按钮。
第一个保存按钮
//a[@id='saveNewUIPortButtonId']//span
对于第二个保存按钮
//a[@id='saveSettingsButtonId']//span
答案 1 :(得分:-1)
他们可能有相同的名字&#34;但他们有不同的身份证。以下示例使用C#。 单击第一个按钮:
driver.FindElement(By.Id("saveNewUIPortButtonId").Click();
然后点击第二个按钮:
driver.FindElement(By.Id("saveSettingsButtonId").Click();
此外,您所描述的错误消息&#34;重复发现的元素过时了#34;很可能是由于最初定义了WebElement,然后在页面刷新/重新加载后没有重新定义。因此,如果页面在元素定义后重新加载,则需要重新定义它或直接使用上面提供的语句。
Javascript选项
以下是我在下面的评论中提到的javascript选项。 这是第一个按钮:
javaScriptExecutor.executeScript("PrimeFaces.ab({source:'saveNewUIPortButtonId',process:'saveNewUIPortButtonId uiPortFieldId uiHttpsPortFieldId',update:'uiPortGridId growl'});return false;");
这是第二个按钮:
javaScriptExecutor.executeScript("PrimeFaces.ab({source:'saveSettingsButtonId',process:'saveSettingsButtonId nodeNameFieldId locationLongitudeFieldId locationLatitudeFieldId hostnameFieldId dconePortFieldId systemStatusPollingIntervalFieldId systemStateItemAgeThresholdFieldId consistencyCheckRevisionQuantityFieldId consistencyCheckScheduleEnabledFieldId consistencyCheckScheduleFrequencyFieldId',update:'SystemDataPanelId growl'});return false;");
基本上复制onclick中的内容=&#34;&#34;您想要的按钮的属性,并将其作为参数粘贴到此语句,将参数括在双引号
中javaScriptExecutor.executeScript();