Selenium wait пока не ждет, пока элемент не станет видимым - PullRequest
2 голосов
/ 02 августа 2020

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

URL-адрес «https://timesheet.mydomain.com/timesheet.aspx» откроет перенаправление на Страница входа в систему моей компании, и мне нужно подождать, пока не станут видны входные данные для входа.

Текстовое поле имени пользователя можно определить по идентификатору - идентификатору пользователя, и я добавил строку ниже, чтобы дождаться его видимости. Однако он не может дождаться и выдает следующую ошибку.

Как мне это исправить? Я попытался найти решения для этого в уже отвеченных вопросах в Stackoverflow и других форумах, но не смог. Пожалуйста, помогите исправить это.

Protractor Async / Await Error: Необработанное отклонение обещания

const { Builder, By, Key, until } = require('selenium-webdriver')
const assert = require('assert')

describe('Timesheet', function() {
  this.timeout(30000)
  let driver
  let vars
  beforeEach(async function() {
    driver = await new Builder().forBrowser('chrome').build()
    vars = {}
  })
  afterEach(async function() {
    await driver.quit();
  })
  it('Timesheet', async function() {
    await driver.get("https://timesheet.mydomain.com/timesheet.aspx")
    await driver.manage().window().setRect(1920, 1053)
    await driver.wait(until.elementIsVisible(await driver.findElement(By.id("userid"))), 60000)
    await driver.findElement(By.id("userid")).sendKeys("userid@mydomain.com")
    await driver.findElement(By.id("userid")).sendKeys(Key.ENTER)
  })
})

. / Node_modules / .bin / mocha timeSheet. js

       Timesheet:
     NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"*[id="userid"]"}
  (Session info: chrome=83.0.4103.116)
      at Object.throwDecodedError (node_modules/selenium-webdriver/lib/error.js:550:15)
      at parseHttpResponse (node_modules/selenium-webdriver/lib/http.js:565:13)
      at Executor.execute (node_modules/selenium-webdriver/lib/http.js:491:26)
      at processTicksAndRejections (internal/process/task_queues.js:97:5)
      at async Driver.execute (node_modules/selenium-webdriver/lib/webdriver.js:700:17)
      at async Context.<anonymous> (timeSheet.js:18:46)

1 Ответ

0 голосов
/ 03 августа 2020

Вы пробовали сделать селен, пытаясь найти элемент с помощью XPath? Иногда не удается найти идентификатор, я использую только XPath, потому что они вообще работают. Тогда это будет:

 it('Timesheet', async function() {
    await driver.get("https://timesheet.mydomain.com/timesheet.aspx")
    await driver.manage().window().setRect(1920, 1053)
    await driver.wait(until.elementIsVisible(await driver.findElement(By.XPATH("XPATH"))), 60000)
    await driver.findElement(By.XPATH("XPATH")).sendKeys("userid@mydomain.com")
    await driver.findElement(By.XPATH("XPATH")).sendKeys(Key.ENTER)

Вы также можете использовать метод неявного ожидания, например, ниже:

driver.implicitly_wait(15) #seconds to wait
await = driver.find_element_by_xpath("//*[@id='--ID--']") #Put in ID or XPATH
await.click() #If the driver is able to find the element within the time you set it to wait for, it will go on doing everything written under the implicitly wait line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...