首页 > 解决方案 > 当 isExisting 为 true 时,无法点击按钮;isDisplayedInViewport 为 true,但 WebdriverIO 中的元素 waitForDisplayed 超时

问题描述

脚本因此错误而失败。错误:元素(“.WONDERESC”)在 30000 毫秒后仍未显示

尝试了 Xpath、(relative、fixed、text()} 和 CSS 选择器的不同组合,但未单击按钮。代码块中的登录按钮div:

<div>
    <div class="WONDERBSC" role="form">
        <div>
            <div class="WONDERJ1B" data-automation-id="userName">
                <div class="TOM-Label WONDERP1B"
                    title="Username">Username</div>
                <input type="text"
                        class="TOM-TextBox WONDERM1B" aria-label="Username">
                    <button type="button" class="TOM-Button WONDERN1B"/>
            </div>
        </div>
            <div>
                <div class="WONDERJ1B"
                    data-automation-id="password">
                    <div class="TOM-Label WONDERP1B" title="Password">Password</div>
                    <input type="password" class="TOM-PasswordTextBox WONDERM1B" aria-label="Password">
                        <button type="button" class="TOM-Button WONDERN1B"/>
                </div>
            </div>
                <button type="button"
                        class="WONDERESC"
                        data-automation-id="goButton">Sign In</button>
    </div>      
</div>
 

请提出解决方法-其他条件也满足-可见性-真实,显示块,不透明度不为零。

谢谢,谭

标签: seleniumautomated-testsmocha.jswebdriver-io

解决方案


As it was told in the comments, you are using invalid selectors.

Assuming you have the latest WebdriverIO v6, the following works like a charm

// open page
browser.url('https://impl.workday.com/wday/authgwy/accenture_dpt2/login.htmld?redirect=n')

const form = $('[data-automation-id="authPanel"] [role="form"]')
// make sure form is visible
expect(form).toBeVisible()

// define form data
const formData = [{
    id: 'userName', value: 'test'
}, {
    id: 'password', value: 'password'
}]

// fill form
formData.forEach(f => {
    form.$(`[data-automation-id="${f.id}"] input`).setValue(f.value)
})

// submit form
form.$('button[data-automation-id="goButton"]').click()

// make sure error message exist
const errorMessage = $('[data-automation-id="alertMessage"]')
expect(errorMessage).toBeVisible()
expect(errorMessage).toHaveTextContaining('Invalid user name or password')

推荐阅读