【问题标题】:Find element with certain text using Selenium with Python使用 Selenium 和 Python 查找具有特定文本的元素
【发布时间】:2016-12-10 15:45:12
【问题描述】:

目前,我正在使用它并且它有效。

self.browser.find_element_by_xpath('//a/h4[text()="item I want"]').click()

有没有更好的按文本选择的方法?我觉得使用 xpath 会极大地影响代码的可读性。

可以是任意数量元素的简单 HTML 示例。目的是测试添加到数据库中以进行功能测试的特定葡萄酒。

{% extends 'wine/base.html' %}
{% block content %}
    <section id="wine_content">
        <div class="cards">

            {% for wine in wines %}
            <div class="card">
                <a href="/wine/{{ wine.id }}">
                    <h4>{{ wine.name }}</h4>
                    <p>{{ wine.vintage }}</p>
                    <p>{{ wine.description}}</p>
                </a>
            </div>
            {% endfor %}

        </div>
    </section>

{% endblock %}

【问题讨论】:

  • 您可以发布相关元素的完整 html 吗?

标签: python django selenium testcase


【解决方案1】:

如果你想提高代码的可读性,你应该看到遵循页面对象模式。

第一步是在具有明确名称的变量中定义定位器:

from selenium.webdriver.common.by import By
item_wine_pinot_noir = (By.XPATH, "//a/h4[text()='%s']" % "Pinneau noir")
browser.find_element(*item_wine_pinot_noir).click()

【讨论】:

  • 什么是由?这是一个仅限 Java 的类吗?我找不到 Python 的相关信息。
  • @Michael Bruce,这是从 selenium.webdriver.common.by 导入的
  • 谢谢!这真的是一个很大的帮助!我会坚持标记已解决,看看是否有其他方法。到目前为止,这很棒。
  • browser.get_element(By.XPATH, "//a/h4[text()='%s']" % 'wine name') 有效......但我无法得到你的例子元组 - item_wine_pinot_noir 在 find_element(tuple) 中被接受。
  • Django 和使用 Django 模板。
【解决方案2】:

你可以试试这个

self.browser.find_element_by_link_text('item I want').click()

【讨论】:

  • 你会认为这会起作用,但我没有运气。会不会是链接里有h4?我什至删除了 h4 以防万一,但它仍然未能通过 FT。
  • 实际上,即使在链接中使用&lt;h1&gt;&lt;p&gt;&lt;span&gt;,这也应该可以工作......但似乎find_element_by_link_text() 并不总是按预期工作
猜你喜欢
  • 2020-01-13
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 2018-11-11
  • 2020-09-05
  • 1970-01-01
  • 2012-08-14
  • 2017-08-15
相关资源
最近更新 更多