<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>POM - 标签 - 一峰的记录</title>
        <link>https://www.simplife.tech/tags/pom/</link>
        <description>POM - 标签 - 一峰的记录</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 29 Nov 2020 12:32:37 &#43;0800</lastBuildDate><atom:link href="https://www.simplife.tech/tags/pom/" rel="self" type="application/rss+xml" /><item>
    <title>UI 自动化测试中的链式调用设计</title>
    <link>https://www.simplife.tech/posts/chain-call-in-ui-automation/</link>
    <pubDate>Sun, 29 Nov 2020 12:32:37 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/chain-call-in-ui-automation/</guid>
    <description><![CDATA[<h1 id="ui-自动化测试中的链式调用设计">UI 自动化测试中的链式调用设计</h1>
<h2 id="一问题">一、问题</h2>
<p>传统的 UI 自动化测试代码往往是这样写的：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-python">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_login_and_create_report</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;/login&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;username&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">send_keys</span><span class="p">(</span><span class="s2">&#34;admin&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;password&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">send_keys</span><span class="p">(</span><span class="s2">&#34;admin123&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;login-btn&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;/reports&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;new-report&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;report-name&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">send_keys</span><span class="p">(</span><span class="s2">&#34;测试报表&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;save-btn&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">assert</span> <span class="s2">&#34;创建成功&#34;</span> <span class="ow">in</span> <span class="n">driver</span><span class="o">.</span><span class="n">page_source</span></span></span></code></pre></div></div>
<p>问题很明显：<strong>测试逻辑被一大堆底层操作淹没了</strong>，看不出主线流程。</p>]]></description>
</item>
<item>
    <title>UI 自动化测试的 POM 设计模式实践</title>
    <link>https://www.simplife.tech/posts/ui-automation-pom-design/</link>
    <pubDate>Fri, 27 Nov 2020 11:53:35 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/ui-automation-pom-design/</guid>
    <description><![CDATA[<h1 id="ui-自动化测试的-pom-设计模式实践">UI 自动化测试的 POM 设计模式实践</h1>
<h2 id="一背景">一、背景</h2>
<p>在 UI 自动化测试中，持续维护测试脚本的成本很高。页面稍微一改动，大量的测试用例就有可能失败，需要人工修改适配。</p>
<p>因此，有人提出了POM（Page Object Model）设计模式。核心思维是将页面结构和测试逻辑分离，使测试代码更易于维护和扩展。</p>]]></description>
</item>
</channel>
</rss>
