2016-11-29 71 views
2

我已將Sikuli與我的Selenium項目整合在一起。爲了學習,我使用簡單的gmail登錄應用程序使用Sikuli自動化它。那麼,我可以執行腳本。現在,讓我們說,我在我的用戶名字段中輸入了一些內容。有時,鼠標不會徘徊到用戶名字段。所以我的測試腳本失敗了。這是間歇性的行爲。Sikuli的間歇性故障

public static void main(String[] args) throws Exception { 

    Screen screen = new Screen(); 

    Pattern pattern1 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\UserName.PNG"); 
    Pattern pattern2 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\Password.PNG"); 
    Pattern pattern3 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SignIn.PNG"); 
    Pattern pattern4 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\Next.PNG"); 
    Pattern pattern5 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SignedIn.PNG"); 
    Pattern pattern6 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SentMail.PNG"); 
    Pattern pattern7 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SentMessage.PNG"); 

    System.setProperty("webdriver.chrome.driver","E:\\Projects\\Java\\Demo\\Drivers\\chromedriver.exe"); 
    WebDriver driver = new ChromeDriver(); 
    driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS); 
    driver.navigate().to("https://www.gmail.com"); 
    driver.manage().window().maximize(); 
    screen.type(pattern1,"email id"); 
    screen.click(pattern4); 
    screen.type(pattern2,"password"); 
    screen.click(pattern5); 
    screen.click(pattern3); 
    screen.wait(pattern6,20); 
    screen.click(pattern6); 
    screen.wait(pattern7,5); 
    screen.click(pattern7); 
} 

有沒有人有一個想法,爲什麼會發生這種情況?

+0

請張貼什麼代碼,你可以幫我們調試這種情況下,如果你創建一個http://jsfiddle.net你會得到同樣的問題嗎? – haxxxton

+0

@haxxxton - 我更新了我的代碼 – Aishu

回答

0

首先,分享你的代碼。

通常,像您描述的間歇性行爲是由超時引起的。這意味着你正在尋找一個尚未存在或尚未穩定的元素。

您的方案中的一個實際示例可能會嘗試在頁面完全加載之前檢測到用戶名字段。瞭解你如何使用這兩種工具將會很有用。你用於導航和什麼元素標識?

說了這樣的話,嘗試解決這個問題最快的方法是在開始搜索用戶名元素之前,延遲幾秒鐘。看看是否有幫助你。

編輯 現在,當您發佈您的代碼,看看這兩條線:

driver.manage().window().maximize(); 
screen.type(pattern1,"email id"); 

在這裏,你瀏覽器窗口最大化,並立即設法找到並鍵入所描述的元素pattern1。這可能是一個問題,因爲您的driver實例不會等待窗口變爲最大化並且下一個命令將立即開始執行。您應該留出一些時間來確保窗口已完成調整大小。只需在這些線條之間添加短暫的睡眠,看看是否有幫助。

+0

我已經更新了我的代碼。正如我所說,我仍然看到那種間歇行爲 – Aishu

+0

@Aishu看看我的編輯。 –

0

因爲它是間歇性發生的並且發生在新繪製的屏幕中的第一個動作,所以這看起來像是一個計時問題。
這裏的Sikuli解決方案是等到您的輸入字段可用後再使用它。

的語句中使用的是:

wait(pattern1[, seconds]) 

插入之前:

screen.type(pattern1,"email id"); 

參考:
http://doc.sikuli.org/region.html#Region.wait