【问题标题】:element never gets visible for selenium python but works fine in selenium IDE元素对于 selenium python 永远不可见,但在 selenium IDE 中工作正常
【发布时间】:2017-10-16 13:12:28
【问题描述】:

我已经处理了几天,现在我放弃了搜索和尝试

我正在用 selenium 编写一个测试用例,它是关于一个隐藏的表单,在按下某个按钮后它变得可见(使用引导函数“whatever.show()”)。因为我是 selenium 的新手,所以我尝试的第一件事是使用 seleniumIDE 制作测试用例,一切正常,然后导出到 pyhon 文件,当我尝试执行脚本时,它打破说 元素不可见。我试图等到元素变得可见,但从来没有。我尝试的功能是可见的

 try:
            element = WebDriverWait(driver, 10).until(
                EC.visibility_of_element_located((By.ID, "Email"))
            )
        finally:
            driver.quit()

还有别的东西,他们有另一个面板,里面有一个 id="Email" 的输入,但我试图先让面板找到元素,点击按钮后,没有面板对 selenium 可见,尽管它是运行我可以看到单击按钮后可见的面板

    terceroPanel = driver.find_element_by_id("divFormTercero")


    argosPanel = driver.find_element_by_id("divFormArgos")
    emailInput = argosPanel.find_element_by_id("Email")
    print(terceroPanel.is_displayed())
    print(argosPanel.is_displayed())
    print(emailInput.is_displayed())
    emailInput.clear()
    emailInput.send_keys("andresmauriciogomezr@gmail.com")

argosPanel 是我感兴趣的面板,terceroPanel 是另一个,三个控制台输出都是“False”

我上次尝试的完整代码是

    driver.get(self.base_url + "/IngresosOnline/")
    driver.find_element_by_css_selector("#btnUserArgos").click()
    try:
        element = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.ID, "Email"))
        )
    finally:
        driver.quit()

    terceroPanel = driver.find_element_by_id("divFormTercero")
    argosPanel = driver.find_element_by_id("divFormArgos")
    emailInput = argosPanel.find_element_by_id("Email")
    print(terceroPanel.is_displayed())
    print(argosPanel.is_displayed())
    print(emailInput.is_displayed())
    emailInput.clear()
    emailInput.send_keys("andresmauriciogomezr@gmail.com")

发送密钥时它会中断。甚至我可以在抛出异常之前看到输入获得焦点

如果有人能帮我解决这个问题,非常感谢。

这里是HTML,代码不是我的,我正在测试一些合作伙伴的应用程序

div class="col-md-12" id="divFormArgos" hidden>

<section id="loginFormArgos">
    <form action="/IngresosOnline/Account/Login" class="form-horizontal" method="post" role="form"><input name="__RequestVerificationToken" type="hidden" value="CwUxjXIIsx9b0IXeDhdb7FXlhTiMuYusRMvjZjG2KIXFfSi8lhC_4j19OXZKzU8bfffxY5d_1cmzigNUCcd78AJDf7_DZXGmhnQ_ayWWWks1" />                            <h4>Use una cuenta Argos para iniciar sesión.</h4>
    <hr />
        <div class="form-group">
            <label class="col-md-4 control-label" for="Email">Correo electr&#243;nico</label>
            <div class="col-md-8">
                <input class="form-control" data-val="true" data-val-email="El campo Correo electrónico no es una dirección de correo electrónico válida." data-val-required="El campo Correo electrónico es obligatorio." id="Email" name="Email" type="text" value="" />
                <span class="field-validation-valid text-danger" data-valmsg-for="Email" data-valmsg-replace="true"></span>
            </div>
        </div>
        <div class="form-group">
            <label class="col-md-4 control-label" for="Password">Contrase&#241;a</label>
            <div class="col-md-8">
                <input class="form-control" data-val="true" data-val-required="El campo Contraseña es obligatorio." id="Password" name="Password" type="password" />
                <span class="field-validation-valid text-danger" data-valmsg-for="Password" data-valmsg-replace="true"></span>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <div class="checkbox">
                    <input data-val="true" data-val-required="El campo ¿Recordar cuenta? es obligatorio." id="RememberMe" name="RememberMe" type="checkbox" value="true" /><input name="RememberMe" type="hidden" value="false" />
                    <label for="RememberMe">&#191;Recordar cuenta?</label>
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Iniciar sesión" class="btn btn-primary" />
                <a class="btn btn-danger" id="btnCancelar1">Cancelar</a>
            </div>

        </div>
        <br />
    </form> 
    </section>

使用 una cuenta asignada para iniciar sesión。
科雷奥电子 反对者 ¿ 记录 cuenta? 取消

¿Ha olvidado su contraseña?

使用 una cuenta asignada para iniciar sesión。
科雷奥电子 反对者 ¿ 记录 cuenta? 取消

¿Ha olvidado su contraseña?

【问题讨论】:

  • 你能用一些HTML更新问题吗?
  • 网站可能在显示提交按钮后做了一些厚颜无耻的事情,比如将其隐藏在另一个元素下,这样您就必须在其显示区域的某个地方物理单击它才能登录。您可以尝试使用 ActionChain:等待它可见,然后在 ActionChain 中,move_to_element(),click(),clear() 然后 send_keys,最后执行。
  • 问题是它永远不会被 selenium 看到,但最奇怪的是它可以在 selenium-ide 上工作

标签: python selenium-webdriver selenium-ide


【解决方案1】:

如果有人遇到同样的问题,所有问题都是存在两个具有相同 id 的元素,第一个不可见,第二个(想要的)可见。 Selenium 试图找到可见的(第一个)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多