我是硒的新手,很难让它等到元素可见。
输入不正确的凭据后显示的元素如下所示:
<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 [包含(。,'用户 用户名不存在')]“}
答案 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']"))
如果没有帮助,请回复。