【问题标题】:How to verify dynamic element present in Selenium WebDriver如何验证 Selenium WebDriver 中存在的动态元素
【发布时间】:2015-08-14 07:08:56
【问题描述】:

我正在使用 Selenium WebDriver 在 Python 中编写脚本来测试 Web 应用程序。

Web 应用程序允许用户提出问题,这些问题会在被问到时添加到 div 中。每个问题 div 都有自己的“upvote”和“downvote”链接/图像。单击“upvote”图标时,图像会发生变化,从活动变为非活动,反之亦然。我知道这个赞成图标的 xpath 是:

"//div[@id='recent-questions-container']/div/div/div/div/div[2]/div/ul/li/a/i"

路径末尾的这个“i”是一个类,可以是

<i class="fa fa-2x fa-thumbs-o-up"></i>

<i class="fa fa-2x fa-thumbs-up clicked"></i>

取决于它是否被点击。我想验证点击后正确的图像是否到位。我怎样才能做到这一点?理想情况下,我想使用断言来执行此验证,例如:

self.assertTrue(self.is_element_present( ... ))

这是我正在谈论的html

<div id="recent-questions-container">
    <div question_id="randomly generated blah" class="q row recent-question animated pulse" data-score="0">
        <div class="col-xs-12">
        <div class="question-content">
            <p>3</p>


            <div class="row question-controls">
                <div class="owner-view hidden">
                    ...
                <div class="student-view">
                    <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 question-controls-left">
                        <ul class="list-inline">
                            <li>
                                <a href="#" class="student-view thumbs-up-to-active">
                                    <i class="fa fa-thumbs-o-up fa-2x"></i></a>
                            </li>
                            <li>
                                <span class="num-votes">0</span>
                            </li>
                            <li class="thumbs-down-li">
                                <a href="#" class="student-view thumbs-down-to-active">
                                    <i class="fa fa-thumbs-o-down fa-2x"></i></a>
                            </li>
                        </ul>
                    </div>

                </div>

            </div>
            <hr>
        </div>
    </div>
    </div>
... other questions ... 
            </div>
            <hr>
        </div>
    </div>
    </div>


            </div>

【问题讨论】:

    标签: python css selenium selenium-webdriver automated-tests


    【解决方案1】:

    您可以使用get_attribute 获取class 属性,然后搜索该类是否包含clicked 以确保它确实被点击了

    #make sure the selector is correct
    xpath = "//div[@id='recent-questions-container']/div/div/div/div/div[2]/div/ul/li/a/i"
    element = driver.find_element(By.XPATH, xpath)
    attr = element.get_attribute('class')
    if  'clicked' in attr:
        print("clicked")
    else:
        print("was not clicked")
    

    编辑

    我会单击该元素,现在应该期望将类更改为 active。然后找到应该大于 0

    的计数
    driver = self.driver
    #perform click here
    #the idea is to avoid the NoSuchElement exception
    # and see if the element count is greater than 0
    assert (len(driver.find_elements_by_css_selector(".student-view.thumbs-up-to-active")) > 0)
    

    【讨论】:

    • 有没有办法使用“self.assertTrue(self.is_element_present(...))”来做到这一点?
    • 在这种情况下,你真的需要小心选择器。
    • 您需要确保选择器在单击时找到该元素。如果可能的话,给我html 告诉你怎么做。如果选择器不正确而不是预期结果,Selenium 将抛出异常
    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 2014-01-05
    • 2012-02-24
    • 2014-05-13
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多