我對測驗自動化,尤其是 Selenium 比較陌生。我正在使用 Selenium Web 驅動程式 Eclipse。我遇到的最大問題之一是我們的腳本由于 Internet 速度或服務器性能而崩潰。我目前Thread.sleep()用來解決問題。Thread.sleep()然而,強制等待時間直到計時器完成并不是什么秘密。我試圖在下面的腳本示例中找到一個優化的解決方案。瀏覽了 Stackoverflow 上的帖子后,我找到了下面的for() 回圈中提供的解決方案。建議使用:
jse.executeScript("arguments[0].click();", button_Sign).toString().equalsIgnoreCase("complete");
確保操作(單擊按鈕)完成,如果沒有,請稍等片刻,然后在下一次迭代中重試。
在我下面的例子中,每個回圈將有 6 次嘗試。但是代碼會出現錯誤:
“失敗:無法呼叫“Object.toString()”,因為“org.openqa.selenium.JavascriptExecutor.executeScript(String, Object[])”的回傳值為 null”
代碼是:
public void SignSupportFormOnOrder() throws InterruptedException {
JavascriptExecutor jse = (JavascriptExecutor)GlobalVariables._browser.currentDriver;
ExplicitWait.until(ExpectedConditions.visibilityOf(Order_SignSupportingForms));
actions.moveToElement(Order_SignSupportingForms).click().perform();
//Code working but using Thread.sleep():
//Thread.sleep(10000); //Need to look for an alternative solution
//jse.executeScript("arguments[0].click();", button_Sign);
/////////////////////////////////////////////////////////////////////////////////////////
//try as alternative to Thread.sleep(...):
for(int i=0; i < 5; i ){
if(jse.executeScript("arguments[0].click();", button_Sign).toString().equalsIgnoreCase("complete"))
break;
else
Thread.sleep(1000);
}
//Thread.sleep(10000);
}
有人可以給我一個建議我做錯了什么以及如何克服使用Thread.sleep();
uj5u.com熱心網友回復:
由于單擊button_Sign正在關閉一些彈出視窗,我們可以執行如下代碼。
public boolean clickVisibleDisappearsLoop(String xpath1, String xpath2){
waitForElementToBeVisible(xpath1);
int counter = 0;
while (counter<10) {
try {
clickOnElement(xpath1);
waitForElementToDisappear(xpath2,4);
return true;
} catch (Throwable throwable) {
wait(400);
counter ;
}
}
return false;
}
我在這里使用的方法是:
public void wait(int delay) {
Uninterruptibles.sleepUninterruptibly(delay, TimeUnit.MILLISECONDS);
}
public boolean waitForElementToDisappear(String xpath){
try {
wait.until((ExpectedConditions.invisibilityOf(By.xpath(xpath))));
return true;
}catch (Throwable t){
return false;
}
}
在這里,您可以傳遞button_Sign元素 as的 XPath 定位器和應通過單擊asxpath1關閉的彈出視窗的 XPath 定位器。
此外,根據 Java 約定,您應該將其命名為. 我建議將其命名為or 。
此外,您不必在此處回傳布林值,因此您可以簡化這些方法來制作它們。button_Signxpath2button_SignbuttonSignsignBtnsignButtonvoid
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/436010.html
