#java #selenium #testng
#java #селен #testng
Вопрос:
Я новичок в selenium. Я пытаюсь написать скрипт для открытия приложения, ввода имени пользователя и пароля и входа в систему. Я попытался сделать то же самое, используя selenium IDE в firefox. Это работает. Но когда я пытаюсь сделать то же самое, используя selenium и TestNG (JAVA), я получаю следующую ошибку :
org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.xpath: /html/body/form[1]/div[2]/table[2]/tbody/tr[4]/td/button (tried for 10 second(s) with 500 MILLISECONDS interval)
Build info: version: 'unknown', revision: '3169782', time: '2016-09-29 10:24:50 -0700'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{browserAttachTimeout=0, ie.enableFullPageScreenshot=true, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.forceShellWindowsApi=false, pageLoadStrategy=normal, ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:9907/, javascriptEnabled=true, ignoreProtectedModeSettings=false, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss}]
Session ID: a36f7287-5912-48c0-87b2-3d974262c634
at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:80)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:265)
at com.nagest.nrt.NewTest.userLogin(NewTest.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
Фрагмент HTML моей страницы :
<table>
<tr>
<td>User Id: </td>
<td><input type="text" name="USER" id="USER" onfocus="this.style.border='2px solid #3BB9FF';" onblur="this.style.border='2px solid #737373'" /></td>
</tr>
<tr>
<td>Password: </td>
<td><input type="password" name="PASSWORD" id="PASSWORD" onfocus="this.style.border='2px solid #3BB9FF';" onblur="this.style.border='2px solid #737373'" /></td>
</tr>
<tr>
<td><input type="hidden" name="TARGET" id="TARGET" value="/epsweb/view/private/search/search.jsf" /></td>
</tr>
<tr>
<td><button name="Logon" type="submit" onfocus="this.style.border='2px solid #3BB9FF';" onblur="this.style.border='2px solid #737373'">Logon</button></td>
</tr>
</table>
Мой ТЕСТОВЫЙ java-код :
public void userLogin(){
driver.get(baseURL "login url");
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//driver.findElement(By.id("USER")).sendKeys("aaa");
waitVar.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id="USER"]"))).sendKeys("aaa");
waitVar.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id="PASSWORD"]"))).sendKeys("123");;
// driver.findElement(By.name("USER")).sendKeys("aaa");
// driver.findElement(By.name("PASSWORD")).sendKeys("@123");
waitVar.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("/html/body/form[1]/div[2]/table[2]/tbody/tr[4]/td/button"))).click();
String strPageTitle = driver.getTitle();
}
Я пробовал использовать много комбинаций, но теперь работает. Я даже попытался скопировать код из firefox IDE и преобразовать его в java. XPATH выходит из firebug.
Примечание: элементы формы видны до 10 секунд.
Обновление: я попробовал с помощью приведенного ниже кода
WebElement myelement=driver.findElement(By.id("USER"));
String tag=myelement.getTagName();
System.out.println("=====================" tag);// ===============input
myelement.sendKeys("aaaa");
Печатается строка sysout. Но, когда я использую метод SendKeys(), он выдает исключение.
org.openqa.selenium.WebDriverException: Element is not displayed (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 234 milliseconds
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{browserAttachTimeout=0, ie.enableFullPageScreenshot=true, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.forceShellWindowsApi=false, pageLoadStrategy=normal, ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:13799/, javascriptEnabled=true, ignoreProtectedModeSettings=false, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss}]
Session ID: 1c79492b-0fab-497e-9866-cbba060f6c8a
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:636)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:284)
...........
Эта проблема возникает только в IE11. Я попробовал в chrome, он работает правильно.
Комментарии:
1. Для кнопки входа в систему попробуйте прямой xpath — «//button[@name=’Logon’]»и проверьте, работает ли он… Предполагая, что у вас только одна кнопка с таким именем или она первая на странице
2. @Grasshopper: обновил код. Пожалуйста, посмотрите сейчас
3. Какое исключение вы получаете сейчас с обновленным кодом?
4. @Grasshopper: если я использую driver.findElement, я не получаю никакой ошибки. Но использование SendKeys() вызывает исключение
Ответ №1:
Я думаю, вам нужно увеличить время ожидания. Из вашего stacktrace кажется, что вы используете 10 секунд в качестве времени ожидания. В течение этого короткого промежутка времени кнопка входа в систему не отображается. Увеличение времени ожидания может решить вашу проблему.
Комментарии:
1. : Эта проблема возникает только в IE11. Я пробовал в chrome, он работает правильно
Ответ №2:
@Nageswaranm, используйте webdriver wait и найдите элементы, используя id или name или cssSelector. IE не так хорош, как другие браузеры, когда дело доходит до поиска webelement с использованием xpath. В IE это происходит медленно. Также увеличьте ожидание webdriver до 30 секунд. Надеюсь, это решит проблему.
Комментарии:
1. Я также попытался использовать селектор идентификаторов. Он также выдает ту же ошибку. Но тот же код в Chrome работает отлично.