2016-01-20 4 views
1

Я работаю над проектом cloudbase, у которого есть модуль аутентификации пользователя. Пользователь может быть аутентифицирован в системе с использованием учетных данных пользователя, а также с использованием аутентификации OAuth.Selenium кнопка не работает

Я автоматизируя это с селеном, но когда я пытаюсь нажать на «вход в» кнопках не работает,

@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) и с sendKeys(Keys.RETURN)

Также попытался использовать действия

{ 
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() завершается в ожидании, пока неявный тайм-аут (если он у вас есть) закончился, а затем поднял исключение. Вот почему я временно отключил таймаут при вызове 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 Script исполнителя

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

Thank You, Murali

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(); 
Смежные вопросы