私は 2.31 バージョン、testng 6.8 を使用しており、IE 8 でテストを実行しています。このスキームでテストを書いています。次のようになります。
@Test(description="click Save Button ", dependsOnMethods = { "edit form" })
public void clickSaveButton(ITestContext context) {
page.clickSaveButton(driver);
}
次に、ご覧のとおり、要素 ID、xpath などを格納するページ クラスがあります。次のように表示されます。
public void clickSaveButton(WebDriver driver){
Configuration.clickfoundElement(By.id(conf.get("saveButton")), driver);
}
conf は、プロパティ ファイルを表すオブジェクトです。最後に、次のようなことを行う Configuration クラスがあります。
public static void clickfoundElement(By by, WebDriver driver){
int attempts = 0;
while(attempts < 10) {
try {
driver.findElement(by).click();
break;
} catch(NoSuchElementException e) {
System.out.println("NoSuchElementException");
Reporter.log("NoSuchElementException<br/>");
if(attempts==9){
throw(e);
}
}
catch(StaleElementReferenceException e) {
System.out.println("StaleElementReferenceException");
Reporter.log("StaleElementReferenceException<br/>");
if(attempts==9){
throw(e);
}
}}
これにより、 NoSuchElementException と StaleElementReferenceException が発生するのを防ぎ、非常にうまく機能します。
私の最初の質問は、このアプローチが正しいかどうかです。2番目の最も重要な質問は、時々次の問題が発生することです。
Testng は「clickSaveButton」(最終レポート) が渡されたと言っていますが、実際には clickSaveButton アクションは発生しませんでした (テスト中にブラウザを見ているとわかります)。次のテストの最後に、「NoSuchElementException」があります(特に、次のテストが何かをクリックするのではなく、html コンポーネントからテキストを取得するだけの場合)。もちろん、この NoSuchElementException が発生するのは、探している要素が実際には存在しないためです (最後のテスト アクションが発生しなかったため、この要素がなくても前のサイトにいるためです) この状況が発生する理由を教えてください (常に重要であるとは限りません)しかし、たまにしかありません)そしてそれを防ぐ方法は?
前もって感謝します。