У меня проблемы с автоматизацией простой страницы входа в систему JSF, которая принимает 4 ввода (код клиента, системный код, пользователя и пароль) и переходит на страницу администрирования. Приведенный ниже тест ведет себя по-разному с каждым из драйверов, и все они неуспешны. Я посмотрел HTML-код из браузера (просмотр источника) и вижу, что все элементы типа ввода присутствуют с правильными идентификаторами.
UPDATE
Мне удалось заставить код корректно работать с Firefox с изменением ниже (отправка формы путем явного нажатия на кнопку вместо отправки формы). Но другие драйверы показывают такое же ошибочное поведение, как описано.
driver.findElement(By.className("af_commandButton")).click();
код
import junit.framework.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class LoginPage
{
public static void main(final String[] args)
{
// WebDriver driver = new InternetExplorerDriver();
// WebDriver driver = new HtmlUnitDriver();
WebDriver driver = new ChromeDriver();
// WebDriver driver = new FirefoxDriver();
try
{
driver.get("http://domain:port/coco/webapp/login/login.faces");
driver.findElement(By.id("clientCode")).sendKeys("coco");
driver.findElement(By.id("systemCode")).sendKeys("consumer");
driver.findElement(By.id("userId")).sendKeys("ffadmin");
driver.findElement(By.id("password")).sendKeys("password1");
driver.findElement(By.id("LoginloginForm")).submit();
// driver.findElement(By.id("login")).click();
Assert.assertTrue(driver.getPageSource().contains("Administration"));
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
driver.quit();
}
}
}
Chrome
Неправильно заполняется информация, как показано ниже
![enter image description here](https://i.stack.imgur.com/4F8bZ.png)
Internet Explorer
org.openqa.selenium.NoSuchElementException: Unable to find element with id == clientCode (WARNING: The server did not pr
ovide any stacktrace information)
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_24'
Driver info: driver.version: RemoteWebDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:409)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:192)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:209)
at org.openqa.selenium.By$1.findElement(By.java:66)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:184)
at LoginPage.main(LoginPage.java:22)
FireFox
Заполняет информацию правильно, как показано ниже, но ничего не происходит, когда форма отправляется с опубликованным кодом, и я получаю показанное исключение
![enter image description here](https://i.stack.imgur.com/cA9tO.png)
Exception in thread "main" junit.framework.AssertionFailedError: null
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.assertTrue(Assert.java:20)
at junit.framework.Assert.assertTrue(Assert.java:27)
at LoginPage.main(LoginPage.java:30)
HtmlUnitDriver
org.openqa.selenium.WebDriverException: Cannot locate element used to submit form
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_24'
Driver info: driver.version: unknown
at org.openqa.selenium.htmlunit.HtmlUnitWebElement.submitForm(HtmlUnitWebElement.java:155)
at org.openqa.selenium.htmlunit.HtmlUnitWebElement.submit(HtmlUnitWebElement.java:108)
at LoginPage.main(LoginPage.java:27)
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html dir="ltr" lang="en-US">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 February 2006), see www.w3.org">
<meta name="generator" content="Apache Trinidad">
<link rel="stylesheet" charset="UTF-8" type="text/css" href=
"/coco/webapp/adf/styles/cache/interconnect-zcl0st-en-ltr-webkit.css">
<script type="text/javascript">
var _AdfWindowOpenError='A popup window blocker has been detected in your browser. Popup blockers interfere with the operation of this application. Please disable your popup blocker or allow popups from this site.';
</script>
<script type="text/javascript" src=
"/coco/webapp/adf/jsLibs/Common1_0_8.js">
</script>
<script type="text/javascript">
_defaultTZ()
</script>
<link rel="stylesheet" href="../skins/interconnect/trinidad-components.css"
type="text/css">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" src="../Assets/jquery-1.3.2.min.js" type=
"text/javascript">
</script>
<script language="JavaScript" src="../Assets/vsFunctions.js" type=
"text/javascript">
</script>
<script language="JavaScript" src="../Assets/ic-script.js" type=
"text/javascript">
</script>
<script language="JavaScript" src="../Assets/timezone.js" type=
"text/javascript">
</script><!--[if lte IE 6]>
<link rel="stylesheet" type="text/css" href="../Assets/ie6fixes.css" />
<script language="JavaScript" src="../Assets/ie6-script.js"></script>
<![endif]--><!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="../Assets/ie7fixes.css" />
<script language="JavaScript" src="../Assets/ie7-script.js"></script>
<![endif]-->
<script type="text/javascript" language="JavaScript">
function disableButton(inputButton)
{
inputButton.disabled=true;
}
</script>
<title></title>
</head><!-- this is a placehold for application version-->
<body onload=
"return _chain('_checkLoad()','readTimeZoneOffset()',this,event)" onunload=
"_checkUnload(event)">
<a name="top" id="top"></a><noscript>This page uses JavaScript and requires
a JavaScript enabled browser.Your browser is not JavaScript
enabled.</noscript>
<div class="main-header">
<div id="header:header-branding" class="header-branding">
<div id="header:clientbrand" class="client-brand">
<img id="header:client-image" name="header:client-image" src=
"/coco/webapp/skins/interconnect/client-logo.gif">
</div>
</div>
<form id="header:_id5" name="header:_id5" style="margin:0px" method=
"post" onkeypress="return _submitOnEnter(event,'header:_id5');" action=
"/coco/webapp/login/login.faces">
<div id="header:basebar" class="basebar">
<div id="header:finish-right-bar" class="finish-right-bar">
<ul class="navbar navBarHelp"></ul>
</div>
</div><input type="hidden" name=
"org.apache.myfaces.trinidad.faces.FORM" value="header:_id5"><span id=
"tr_header:_id5_Postscript"><input type="hidden" name=
"org.apache.myfaces.trinidad.faces.STATE" value=
"!24835796"><script type="text/javascript">
function _header__id5Validator(f,s){return true;}
</script></span><script type="text/javascript">
_submitFormCheck();
</script>
</form>
<div class="rule"></div>
</div>
<div class="main-menu">
<div class="rule"></div>
</div>
<div id="content" class="compact content split-lines">
<div class="content">
<div class="locale">
<form id="localeChanger" name="localeChanger" class="spacingDisplay"
style="margin:0px" method="post" onkeypress=
"return _submitOnEnter(event,'localeChanger');" action=
"/coco/webapp/login/login.faces">
<div class="locale-links">
<a href="#" onclick=
"submitForm('localeChanger',1,{source:'changeLocale_en'});return false;"
id="changeLocale_en" title="English version" name=
"changeLocale_en"><img id="flagUSA" src=
"/coco/webapp/Images/upgrade/flag_english.jpg" alt=
"English version" border="0" name="flagUSA"></a><a href="#"
onclick=
"submitForm('localeChanger',1,{source:'changeLocale_es'});return false;"
id="changeLocale_es" title="Spanish version" name=
"changeLocale_es"><img id="flagSPAIN" src=
"/coco/webapp/Images/upgrade/flag_spanish.jpg" alt=
"Spanish version" border="0" name="flagSPAIN"></a><a href="#"
onclick=
"submitForm('localeChanger',1,{source:'changeLocale_fr'});return false;"
id="changeLocale_fr" title="French version" name=
"changeLocale_fr"><img id="flagFRANCE" src=
"/coco/webapp/Images/upgrade/flag_french.jpg" alt=
"French version" border="0" name="flagFRANCE"></a><a href="#"
onclick=
"submitForm('localeChanger',1,{source:'changeLocale_pt'});return false;"
id="changeLocale_pt" title="Portuguese version" name=
"changeLocale_pt"><img id="flagBRASIL" src=
"/coco/webapp/Images/upgrade/flag_portuguese.jpg" alt=
"Portuguese version" border="0" name="flagBRASIL"></a>
</div><input type="hidden" name=
"org.apache.myfaces.trinidad.faces.FORM" value=
"localeChanger"><span id="tr_localeChanger_Postscript"><input type=
"hidden" name="org.apache.myfaces.trinidad.faces.STATE" value=
"!24835796"><script type="text/javascript">
function _localeChangerValidator(f,s){return true;}
</script></span><script type="text/javascript">
_submitFormCheck();
</script>
</form>
</div>
<form id="LoginloginForm" name="LoginloginForm" class="spacingDisplay"
style="margin:0px" method="post" onkeypress=
"return _submitOnEnter(event,'LoginloginForm','login');" action=
"/coco/webapp/login/login.faces">
<h1 class="pageTitle">
User Authentication
</h1>
<div class="wizard">
<div class="section">
<div class="content">
<div class="input">
<div class="field">
<span class="label"><label for="clientCode">Client
Code</label></span>
<div class="content">
<script type="text/javascript">
var _locale='en-US';var _tLocale='en-US';
</script><script type="text/javascript" src=
"/coco/webapp/adf/jsLibs/resources/LocaleElements_en_US1_0_8.js?loc=en_US">
</script><span class="af_inputText p_AFRequired"><input id="clientCode"
name="clientCode" class="af_inputText_content" size="30"
maxlength="20" type="text"></span>
</div>
</div>
<div class="field">
<span class="label"><label for="systemCode">System
Code</label></span>
<div class="content">
<span class="af_inputText p_AFRequired"><input id=
"systemCode" name="systemCode" class=
"af_inputText_content" size="30" maxlength="20" type=
"text"></span>
</div>
</div>
<div class="field">
<span class="label"><label for="userId">User
Id</label></span>
<div class="content">
<span class="af_inputText p_AFRequired"><input id=
"userId" name="userId" class="af_inputText_content" size=
"30" maxlength="20" type="text"></span>
</div>
</div>
<div class="field">
<span class="label"><label for=
"password">Password</label></span>
<div class="content">
<span class="af_inputText p_AFRequired"><input id=
"password" name="password" onkeydown=
"return _clearPassword(this, event);" class=
"af_inputText_content" size="30" maxlength="20" type=
"password"></span>
</div>
</div>
</div><img class="wizard-graphic" src=
"../Images/upgrade/safe_box.jpg">
<div class="section">
<button id="login" name="login" type="button" onclick=
"submitForm('LoginloginForm',1,{source:'login'});return false;"
class="action af_commandButton">Log In</button><button id=
"forgotPassword" name="forgotPassword" type="button" class=
"action af_goButton" onclick=
"document.location='../forgotpassword/ForgotPassword.faces'">Password
Help</button>
</div>
</div>
</div>
</div>
<div class="legalNoticeLogin">
<div class="section">
<div class="content">
<div id="legalCopy" class="copy">
<div class="xcopy af_outputDocument">
<p class="af_outputDocument_paragraph">
<b>IMPORTANT - READ CAREFULLY</b>
</p>
<p class="af_outputDocument_paragraph">
The private Web site you are about to enter
</p>
</div>
</div>
</div>
</div>
</div><input type="hidden" name=
"org.apache.myfaces.trinidad.faces.FORM" value=
"LoginloginForm"><span id="tr_LoginloginForm_Postscript"><input type=
"hidden" name="org.apache.myfaces.trinidad.faces.STATE" value=
"!24835796"><script type="text/javascript">
function _LoginloginFormValidator(f,s){return true;}
</script></span><script type="text/javascript">
_submitFormCheck();
</script>
</form>
</div>
</div>
</body>
</html>