我正在使用具有用户身份验证模块的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 :(得分: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();
说明:我在调用Click()之前显式调用了Release()。有时它是必要的,有时它不是。如果不是必要的,那么调用Release()会等到隐式超时(如果有的话)结束然后引发异常。这就是为什么我在调用Release()时暂时禁用超时,以及为什么我将它包装在TryPerform()方法中,以便忽略该异常。看看我的TryPerform()方法:
public static bool TryPerform(this IAction action)
{
try
{
action.Perform();
}
catch (Exception)
{
return false;
}
return true;
}
我知道,Java中没有扩展方法,但你可以解决这个问题。
答案 1 :(得分: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);
谢谢你, 穆拉利
答案 2 :(得分: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
答案 3 :(得分:0)
您可以尝试使用expected conditions
进行明确等待WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(By.id("cred_sign_in_button"))).click();