<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>链式调用 - 标签 - 一峰的记录</title>
        <link>https://www.simplife.tech/tags/%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8/</link>
        <description>链式调用 - 标签 - 一峰的记录</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/%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8/" 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>
</channel>
</rss>
