2016-01-20 184 views
1

我正在開發cloudbase項目,它具有用戶認證模塊。用戶可以使用用戶憑證對系統進行身份驗證,也可以使用OAuth身份驗證。硒按鈕單擊不起作用

我與硒自動化這個,但是當我試圖點擊「簽到」按鈕,這是行不通的,與sendKeys(Keys.RETURN)

而且

@BeforeTest 
    public void setUp() 
    { 
     driver = new FirefoxDriver(); 
     driver.get("Application URL"); 
     driver.manage().window().maximize(); 

    } 

    @Test 
    public void enterCredentials() 
    { 
     driver.findElement(By.id("cred_userid_inputtext")).sendKeys("email address"); 
     driver.findElement(By.id("cred_password_inputtext")).sendKeys("password"); 
     driver.findElement(By.id("cred_sign_in_button")).click(); 
} 

我一直在使用sendKeys(Keys.ENTER),並試圖同使用操作嘗試

{ 
WebElement signIn_button = driver.findElement(By.id("cred_sign_in_button")) 

Actions enterSignIn = new Actions(driver); 
enterSignIn.moveToElement(signIn_button); 
enterSignIn.click(); 
enterSignIn.perform(); 
} 
+0

你試圖找到元素?根據你的xpath可能有多個元素可用。 –

+0

你有什麼錯誤嗎? – Guy

+0

我已經使用XPath和其他定位器進行了嘗試。 –

回答

0

由於某些原因,在某些頁面上,Firefox似乎需要對Click()進行特殊處理。我解決了它這種方式(在C#中,但Java應該是相似的):

// special workaround for the FirefoxDriver 
var actions = new Actions(driver); 

actions.MoveToElement(element); 

ToolBox.DisableTimeout(testParams); 
actions.Release().Build().TryPerform(); 
ToolBox.EnableTimeout(testParams); 

actions.MoveToElement(element); 
actions.Click().Build().Perform(); 

說明:我打電話之前點擊顯式調用發佈()()。有時候這是必要的,有時不是。如果它是而不是必要的,那麼調用Release()將等待直到隱式超時(如果有的話)結束,然後引發異常。這就是爲什麼我在調用Release()時臨時禁用超時的原因,以及爲什麼我將它包裝在TryPerform()方法中,以便忽略該異常。看看我TryPerform()方法中:

public static bool TryPerform(this IAction action) 
{ 
    try 
    { 
     action.Perform(); 
    } 
    catch (Exception) 
    { 
     return false; 
    } 

    return true; 
} 

我知道,有沒有在java擴展方法,但你可能可以解決這個類似。

0

有些時候睡眠之前,點擊將正確模擬點擊。像

Thread.sleep(3000); 
    driver.findElement(By.id("cred_sign_in_button")).click(); 

如果上面一個沒有工作,因爲你已經嘗試了所有定位器和動作,所以用java腳本執行

WebElement element = driver.findElement(By.id("cred_sign_in_button")); 
    JavascriptExecutor executor = (JavascriptExecutor)driver; 
    executor.executeScript("arguments[0].click();", element); 

謝謝你, 穆拉利

0

試試這個試試,

WebElement element = driver.findElement(By.id("cred_sign_in_button")); 
JavascriptExecutor executor = (JavascriptExecutor)driver; 
[enter link description here][1]executor.executeScript("arguments[0].click();", element); 

訪問Here

0

你可以嘗試明確的等待與expected conditions

WebDriverWait wait = new WebDriverWait(driver, 20); 
wait.until(ExpectedConditions.elementToBeClickable(By.id("cred_sign_in_button"))).click();