硒等待元素出现

时间:2019-06-05 20:46:15

标签: javascript selenium

我是硒的新手,很难让它等到元素可见。

输入不正确的凭据后显示的元素如下所示:

<div class="jss357">User with that username does not exist</div>

async function loginFailure(driver) {
    try {
      await driver.get('WEBSITE')
      await driver.findElement(By.name('username')).sendKeys(usernameBad)
      await driver.findElement(By.name('password')).sendKeys(passwordBad)
      await driver.findElement(By.css("button[type='submit']")).click()
      let elm = await driver.findElement(By.xpath("//div[contains(.,'User 
with that username does not exist')]"))
      await driver.wait(until.elementIsVisible(elm))
    } catch(e) {
      console.error('loginFailure failed.error: ', e.message)
    }
    finally {
        console.log('loginFailure finished')
    }
  }
  

loginFailure失败。错误:没有这样的元素:无法找到元素:   {“ method”:“ xpath”,“ selector”:“ // div [包含(。,'用户   用户名不存在')]“}

3 个答案:

答案 0 :(得分:0)

尝试一下

let el =等待driver.findElement(“ ByLocator_Here”);

await driver.wait(until.elementIsVisible(el),100);

此外,请在此处查看seeleniumhq文档 https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/until.html

答案 1 :(得分:0)

我使用Java,但是您应该使用类似的语法

wait.until(elementAvailable(By.className("jss357")));

---重温此答案。我很好奇,如果您稍作更改,然后在将值分配给elm之前,等待元素的存在。我认为您正在收到错误消息,因为最初将html元素分配给变量时,页面上尚不存在该元素。您可能需要明确地等待它的出现。

所以会是这样:

wait.until(elementAvailable(By.xpath("//div[contains(.,'User with that username does not exist')]"));
let elm = driver.findElement(By.xpath("//div[contains(.,'User with that username does not exist')]"))

答案 2 :(得分:-1)

我猜您的定位器不正确,因为错误提示“没有这样的元素:无法找到元素”,不确定为什么需要那个。在预期文本之前。您可以按不只是包含的确切文本进行搜索。

您的定位器应为-

driver.findElement(By.xpath("//div[text() = 'User with that username does not exist']"))

如果没有帮助,请回复。