Вызывается: org.openqa.selenium.InvalidSelectorException: - PullRequest
0 голосов
/ 26 апреля 2019

Я новичок в тестировании автоматизации Selenium Получение ошибки Selenium

Когда я пытаюсь запустить приведенный ниже код каждый раз, когда я получаю сообщение об ошибке "org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание видимости элемента, расположенного по By.xpath" Я не уверен, какой xpate может быть один, пожалуйста, помогите мне Создан контрольный пример автоматизации для приложения входа в систему.

Java

@Test
    public void enterApplicationCerdentials(String userName, String password) {

 WebDriverWait wait = new WebDriverWait(driver, 50);
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//frameset/frame/html/body/div([@class='tintedBox' and @id='loginBox']/table/tbody/tr/td/input[@id='UserID' and name='UserID'])"))).sendKeys(userName);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Password"))).sendKeys("CSRWHKXESB");
 captureScreen();
 }

HTML:

<frameset rows="*, 1">

<frame src="Script/Login.asp?">
#document
<!--Function return the password for the user who logged in through Referral URL. 
          For TAFE user password is not matching as per database value as their URL is dynamic. ENHC0014091
          This function splits the URL of that particular user (8527066229)   only  . -->

<html><head>



<script language="JavaScript">
//<!--
function OnLoad()
{
  setTimeout("CheckFrame()", 4000);
}

function CheckFrame()
{
  with (parent)
  {
    if ((length==0 && document.frmCheck==null) || 
        (length>0 && frames[1].document.frmCheck==null))
    {
      var PathName = window.location.pathname;
      PathName = PathName.substr(0, PathName.substr(1).indexOf("/") + 1);
      location.href = PathName;
    }
  }
}
//-->
</script></head>



<body onload="OnLoad()" topmargin="0" leftmargin="0" bgcolor="#ffffff" text="#000000" link="#000000" vlink="#000000" alink="#000000">

<div id="login">
<img border="0" src= vspace="10" style="display: block;">
<div class="tintedBox" id="InfoStoreBox">
<h1>  <a class="boldLink" href="https://infostore.saiglobal.com" target="_parent"><u>InfoStore</u></a> ?</h1>
<p></p>
<p><a class="boldLink" href="https://infostore.saiglobal.com" target="_parent"></a> .</p>
<p>Not only a shop, <a class="boldLink" href="https://infostore.saiglobal.com" target="_parent"></a> </p>
<p><a href="https://infostore.saiglobal.com" target="_parent"></a></p>
</div>

<div class="tintedBox" id="loginBox">
<h1></h1>

<form name="form" action="Login.asp?" method="post">
  <input type="hidden" name="Autologout" value="false">
  <input type="hidden" name="Division" value="">
  <span class="error"></span>
  <table>
      <tbody><tr>
          <td>User ID</td>
          <td><input type="text" size="30" id="UserID" name="UserID" value=""></td>
      </tr>
      <tr>
          <td>Password</td>
          <td><input type="password" size="30" id="Password" name="Password" value=""></td>
      </tr>
          <tr>
          <td>Last Name/Location</td>
          <td><input type="text" size="30" id="UserName" name="UserName" value=""></td>
      </tr>
  </tbody></table>
  <br>
  <font color="#d12b2c"><nobr>Your Last Name and Location are now mandatory to access the platform, simply</nobr><br>enter the details in field (e.g. Smith/Perth)</font>
  <br><br>
  <div>
    <input type="checkbox" id="SaveLogin" name="SaveLogin" value="SaveLogin"><label for="SaveLogin" id="save">Save my login so you can remember me on my next visit.</label>
  </div>
  <div align="center" style="padding-top:20px">
    <input class="button" type="submit" name="Submit" value="Submit">
    <input class="button" type="reset" name="Clear" value="Clear">
    <input class="button" type="submit" name="Recognize" value="Remember me?">
  </div>
  <div style="padding-top:20px">
    <nobr>Lost password? Contact your internal Administrator or <a class="boldLink" href="mailto:sales@saiglobal.com?subject=Lost SOL password">our Customer Service</a></nobr>
  </div>
</form>
</div>





</div>
<div id="footer" onmouseover="ShowTime()">©2014 SAI Global</div>
<script>
  function ShowTime()
  {
    var spTime = document.getElementById("footer");
    spTime.innerHTML = "©2014 SAI Global - 20190426 12:25:33.292: 172.20.33.12, 203.27.21.6, 59596377";
  }
</script>


</body></html>

Ошибка:

org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание видимости элемента, расположенного By.xpath: // frameset / frame / html / body / div ([@ class = 'tintedBox' и @ id = 'loginBox'] / table / tbody / tr / td / input [@ id = 'ID пользователя' и name = 'UserID']) (пробовали в течение 50 секунд с 500 миллисекундами интервал) в org.openqa.selenium.support.ui.WebDriverWait.timeoutException (WebDriverWait.java:95) в org.openqa.selenium.support.ui.FluentWait.until (FluentWait.java:272) at seleniumPages.Page_LoginMyApplication.enterApplicationCerdentials (Page_LoginMyApplication.java:67) at stepDefinitions.StepDefs_DataDrivenLogin.i_login_with_credentials_and (StepDefs_DataDrivenLogin.java:23) в?. Я вхожу с учетными данными "tomsmith" и "***************" (resources / features / DataDrivenLogin.feature: 7) Причина by: org.openqa.selenium.InvalidSelectorException: неверный селектор: Невозможно найти элемент с выражением xpath // frameset / frame / html / body / div ([@ class = 'tintedBox' и @ id = 'loginBox'] / table / tbody / tr / td / input [@ id = 'ID пользователя' и name = 'UserID']) из-за следующей ошибки: SyntaxError: Не удалось выполнить «оценить» в «документе»: строка '// frameset / frame / html / body / div ([@ class =' ​​tintedBox 'и @ id = 'loginBox'] / table / tbody / tr / td / input [@ id = 'ID пользователя' и name = 'UserID']) 'не является допустимым выражением XPath. (Информация о сессии: chrome = 73.0.3683.103) (информация о драйвере: chromedriver = 2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1), платформа = Windows NT 6.3.9600 x86_64) (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека). Длительность команды или время ожидания: 0 миллисекунд. документацию по этой ошибке, пожалуйста, посетите: https://www.seleniumhq.org/exceptions/invalid_selector_exception.html Информация о сборке: версия: '3.141.59', ревизия: 'e82be7d358', время: '2018-11-14T08: 25: 48' Системная информация: хост: 'AP01154W8N', IP: «192.168.56.1», os.name: «Windows 8.1», os.arch: «amd64», os.version: '6.3', java.version: '1.8.0_191' Информация о драйвере: org.openqa.selenium.chrome.ChromeDriver Возможности {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 2.46.628402 (536cd7adbad73a ..., userDataDir: C: \ Users \ sinham0 \ AppData \ Lo ...}, cssSelectorsEnabled: true, databaseEnabled: false, goog: chromeOptions: {debuggerAddress: localhost: 65139}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: обычный, платформа: XP, имя платформы: XP, прокси: прокси (), вращающийся: false, setWindowRect: true, strictFileInteractability: false, takeHeapSnapshot: true, takeScreenshot: true, тайм-ауты: {неявный: 0, pageLoad: 300000, скрипт: 30000}, непредвиденное оповещение, поведение: игнорировать, unhandledPromptBehavior: ignore, версия: 73.0.3683.103, webStorageEnabled: true} Идентификатор сеанса: 869efd2308887ee98e8d561566b5a606 *** Информация об элементе: {Using = xpath, value = // frameset / frame / html / body / div ([@ class = 'tintedBox' и @ id = 'loginBox'] / table / tbody / tr / td / input [@ id = 'ID пользователя' и Название 'UserID' =])} at sun.reflect.GeneratedConstructorAccessor10.newInstance (неизвестный источник)

1 Ответ

0 голосов
/ 26 апреля 2019

Причина, по которой вы получаете TimeoutException, заключается в том, что элемент, который вы находите, находится во фрейме, и вы должны переключиться на этот фрейм.В противном случае webdriver не может найти элемент.

Сначала найдите соответствующий селектор для тега frame.В соответствии с предоставленным вами HTML, я создаю локатор.

XPath:

WebElement loginFrame = driver.findElement(By.xpath("//frameset/frame[@src='Script/Login.asp?']"));

Селектор CSS:

WebElement loginFrame = driver.findElement(By.cssSelector("frameset > frame[src='frame_c.htm']"));

Попробуйте это:



@Test
public void enterApplicationCerdentials(String userName, String password) {
WebDriverWait wait = new WebDriverWait(driver, 50);
By frameLocator =  By.xpath("//frameset/frame[@src='Script/Login.asp?']");

wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//frameset/frame[@src='Script/Login.asp?']")));
driver.switchTo().frame(driver.findElement(frameLocator));

wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("UserName"))).sendKeys("UserName");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Password"))).sendKeys("Password");
captureScreen();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...