提交 a0ed79ed 编写于 作者: W wizardforcel

2020-06-23 13:37:34

上级 8b5b7f4b
......@@ -22,7 +22,7 @@
* *幻灯片 2:* 面临的挑战。 简单介绍一下我们在没有自动化的情况下面临的挑战/问题。 允许客户**考虑**。 这也应该作为介绍的介绍。 例如,显示简单场景的图形。 对于每个发行版,测试用例数量都会增加(回归套件+发行用例),从而增加了总体开发成本。 这最终减少了产品的上市时间,这可能会对总收入/销售额造成重大打击。
* *幻灯片 3:* 现在是时候在他们的脑海中植入**创意**了。 引入****
* *幻灯片 3:* 现在是时候在他们的脑海中植入**创意**了。 引入**Selenium**
* *幻灯片 4:* 高亮显示 2 至 3 个关键点。 “ **FREE** ”是当今的流行语,因为客户担心金钱和数字。 现在,您甚至可以在他们的脸上看到微笑。
......
......@@ -20,7 +20,7 @@
有很多高级编程语言,您可能想使用 C#,但其他人可能更喜欢 Python。 每个人都希望利用通用的 WebDriver API 来以自己舒适的语言自动化浏览器。 这是语言级别绑定进入图片的地方。 这些就像用相应语言编写的*粘合代码/包装库*与 WebDriver API 进行通信。 除了 Java,C#,Ruby,Python 绑定外,还有更多。 也很容易添加新的。
接下来到**驱动程序**上。 WebDriver API 使我们可以拥有一些驱动程序,这些驱动程序知道如何驱动与之对应的特定浏览器。 我们有 Chrome 驱动程序,IE 驱动程序,Microsoft Edge 驱动程序,Firefox 驱动程序(内置)等。还有移动专用驱动程序,例如 iOS 驱动程序,Selendriod(适用于 Android 的)等。例如,Chrome 驱动程序知道如何 驱动 Chrome 浏览器执行低级活动,例如操纵 Web 元素,导航到网页,从中获取用户输入等等。
接下来到**驱动程序**上。 WebDriver API 使我们可以拥有一些驱动程序,这些驱动程序知道如何驱动与之对应的特定浏览器。 我们有 Chrome 驱动程序,IE 驱动程序,Microsoft Edge 驱动程序,Firefox 驱动程序(内置)等。还有移动专用驱动程序,例如 iOS 驱动程序,Selendriod(适用于 Android 的 Selenium)等。例如,Chrome 驱动程序知道如何 驱动 Chrome 浏览器执行低级活动,例如操纵 Web 元素,导航到网页,从中获取用户输入等等。
我们在代码中提到了所需的驱动程序。 该驱动程序服务器作为可执行文件提供。 当我们运行测试时,驱动程序服务器会侦听本地计算机上的端口。 它将解释从 WebDriver API 接收的命令,在实际的浏览器上执行,并将结果通过 API 返回给我们的代码。
......
......@@ -2,7 +2,7 @@
> 原文: [https://javabeginnerstutorial.com/selenium/9e-webdriver-code-launching-browsers/](https://javabeginnerstutorial.com/selenium/9e-webdriver-code-launching-browsers/)
如果您只能使用 Selenium(即 Firefox)在一个浏览器中自动化测试,但您的 Web 应用也支持 Chrome 和 IE,该怎么办? 这意味着所有三个浏览器都需要测试! 如果是这种情况,那么就像把头埋在沙子里一样有用。
如果您只能使用 Selenium(即 Firefox)在一个浏览器中自动化测试,但您的 Web 应用也支持 Chrome 和 IE,该怎么办? 这意味着所有三个浏览器都需要测试! 如果是这种情况,那么 Selenium 就像把头埋在沙子里一样有用。
哦,不要惊慌! 我们的统治冠军 WebDriver 在这里为我们提供帮助。 这是我们今天的主题。 让我们潜入吧!
......
......@@ -6,7 +6,7 @@
您准备好将帽子戴上戒指了吗? 如果是,那就开始吧!
展望未来,我们所有的测试都将使用 JUnit 框架。 因此,是时候通过右键单击项目(已设置和 junit)创建新程序包了->新建->程序包。 我已将程序包命名为“ com.blog.junitTests”。
展望未来,我们所有的测试都将使用 JUnit 框架。 因此,是时候通过右键单击项目(已设置 Selenium 和 junit)创建新程序包了->新建->程序包。 我已将程序包命名为“ com.blog.junitTests”。
我们的下一步是创建一个类。 右键单击新创建的包-> New-> Class。 给它起一个名字“ FirstJunitTest.java”,然后单击“完成”。 您的 IDE 现在看起来应该与此类似,
......@@ -110,7 +110,7 @@ public class FirstJunitTest {
![JUnit4 test success](img/d2b038f920d9e74a856f23a7d6a9d228.png)
显示测试用例名称。 发生错误时,将显示栈跟踪。 快捷方式可用于重新运行测试,仅显示失败,查看上一个和下一个失败的测试等。下面是显示错误的示例屏幕截图。
显示测试用例名称。 发生错误时,将显示栈跟踪。 快捷方式可用于重新运行测试,仅显示失败,查看上一个和下一个失败的测试等。下面是显示错误的示例屏幕截图。
![JUnit4 test error](img/088bcc21e786b7be7f5496d288cdea44.png)
......
......@@ -2,7 +2,7 @@
> 原文: [https://javabeginnerstutorial.com/selenium/9j-webdriver-locating-elements-1/](https://javabeginnerstutorial.com/selenium/9j-webdriver-locating-elements-1/)
朋友! 如果您进入了世界,那么您一定已经遇到了 Web Elements! 文本框,按钮,链接,复选框,单选按钮,下拉菜单,警报等,所有内容均视为网络元素。 使用定位器类型和策略,我们可以轻松识别页面上任何所需的元素。 这是与页面进行交互并在代码中进一步引用这些元素的最关键步骤。 是的,它与我们在 Selenium IDE 中看到的[非常相似,除了语法和概念的应用方式。](https://javabeginnerstutorial.com/selenium/7k-ide-locating-elements/)
朋友! 如果您进入了 Selenium 世界,那么您一定已经遇到了 Web Elements! 文本框,按钮,链接,复选框,单选按钮,下拉菜单,警报等,所有内容均视为网络元素。 使用定位器类型和策略,我们可以轻松识别页面上任何所需的元素。 这是与页面进行交互并在代码中进一步引用这些元素的最关键步骤。 是的,它与我们在 Selenium IDE 中看到的[非常相似,除了语法和概念的应用方式。](https://javabeginnerstutorial.com/selenium/7k-ide-locating-elements/)
使用 Selenium webDriver 定位 Web 元素的一般语法是:
......
......@@ -222,7 +222,7 @@ List<WebElement> allSelectedOptions = multiSelect.getAllSelectedOptions();
7. 检查“编程语言”下拉列表是否支持多项选择并将相应消息打印到控制台
8. 使用名称找到“ Selenium Tool Suite”多选框
9. 使用多选 Web 元素创建 Select 类的实例
10. 根据其值选择“ RC”和“优势”
10. 根据其值选择“Selenium RC”和“优势”
11. 通过索引取消选择“ Selenium RC”
12. 通过可见的文本选择“ Selenium WebDriver”
13. 在列表中获取所有选定的选项,并将它们打印到控制台
......
......@@ -60,7 +60,7 @@ Apache ANT 的 JunitReport 任务通过执行以下步骤来生成报告,
今天我们将深入探讨以下内容,
* 更改标题和描述
* 增加栈跟踪字体大小
* 增加栈跟踪字体大小
在下面的文章中,我们还将介绍
......@@ -106,4 +106,4 @@ Apache ANT 的 JunitReport 任务通过执行以下步骤来生成报告,
![Before Title Customization](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20718%20340'%3E%3C/svg%3E)
<noscript><img alt="Before Title Customization" class="size-full wp-image-13084 aligncenter" height="340" src="img/105704c5b193643f7f113ac0be161c95.png" width="718"/><h4><em>AFTER</em></h4><pre><code class="language-xml">&lt;xsl:template name="pageHeader"&gt; &lt;!-- &lt;h1&gt;&lt;xsl:value-of select="$TITLE"/&gt;&lt;/h1&gt; --&gt; &lt;h1&gt;Custom JUnit Report&lt;h1&gt; &lt;table width="100%"&gt; &lt;tr&gt; &lt;td align="left"&gt;&lt;/td&gt; &lt;!-- &lt;td align="right"&gt;Designed for use with &lt;a href="http://www.junit.org/"&gt;JUnit&lt;/a&gt; and &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt;.&lt;/td&gt; --&gt; &lt;td align="right"&gt;Designed by ninjas!&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;hr size="1"/&gt; &lt;/xsl:template&gt;</code></pre><p>保存更改并从 eclipse 生成 JUnit 报告。</p><p><img alt="Title after customization" class="alignnone size-full wp-image-13085" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/15_CustomTitleAfter-1.jpg" height="336" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20773%20336'%3E%3C/svg%3E" width="773"/></p><noscript><img alt="Title after customization" class="alignnone size-full wp-image-13085" height="336" src="img/79f7da90cc8512a6f3a09a33020e5481.png" width="773"/><h2><strong>增加堆栈跟踪字体大小</strong></h2><p>我们在发生故障时看到的堆栈跟踪信息非常小,很难读取。 为了增加其字体大小,只需在模板中添加几行名称为 stylesheet.css 的行即可。</p><pre><code class="language-xml">&lt;xsl:template name="stylesheet.css"&gt; .StackTrace { font-size: 100%; }</code></pre><p>然后将该类添加到“ display-failures”模板的“ code”标签中,该模板负责显示堆栈跟踪信息。</p><h4><em>BEFORE</em></h4><pre><code class="language-xml">&lt;code &lt;xsl:call-template name="br-replace"&gt; &lt;xsl:with-param name="word" select="."/&gt; &lt;/xsl:call-template&gt; &lt;/code&gt;</code></pre><p><img alt="Stack trace before customization" class="alignnone size-full wp-image-13086" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/16_CustomStackTraceBefore-1.jpg" height="281" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20704%20281'%3E%3C/svg%3E" width="704"/></p><noscript><img alt="Stack trace before customization" class="alignnone size-full wp-image-13086" height="281" src="img/bb8d2d9cffa6c125da7d189e67916d17.png" width="704"/><h4>之后<i></i></h4><pre><code class="language-xml">&lt;code class="StackTrace"&gt; &lt;xsl:call-template name="br-replace"&gt; &lt;xsl:with-param name="word" select="."/&gt; &lt;/xsl:call-template&gt; &lt;/code&gt;</code></pre><p><img alt="Stack trace after customization" class="alignnone size-full wp-image-13083" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/17_CustomStackTraceAfter-1.jpg" height="308" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20744%20308'%3E%3C/svg%3E" width="744"/></p><noscript><img alt="Stack trace after customization" class="alignnone size-full wp-image-13083" height="308" src="img/aa339356190129736acc86ac3372a513.png" width="744"/><p>现在是时候戴上帽子了。 愿 ANT 的力量与您同在。</p><p>在另一篇文章中再见。 定制愉快!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/selenium/10d-advanced-webdriver-junit-report-customization-part2/" title="10d. Advanced WebDriver – JUnit Report Customization Contd."> 10d。 高级 WebDriver – JUnit 报告自定义续。 </a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
<noscript><img alt="Before Title Customization" class="size-full wp-image-13084 aligncenter" height="340" src="img/105704c5b193643f7f113ac0be161c95.png" width="718"/><h4><em>AFTER</em></h4><pre><code class="language-xml">&lt;xsl:template name="pageHeader"&gt; &lt;!-- &lt;h1&gt;&lt;xsl:value-of select="$TITLE"/&gt;&lt;/h1&gt; --&gt; &lt;h1&gt;Custom JUnit Report&lt;h1&gt; &lt;table width="100%"&gt; &lt;tr&gt; &lt;td align="left"&gt;&lt;/td&gt; &lt;!-- &lt;td align="right"&gt;Designed for use with &lt;a href="http://www.junit.org/"&gt;JUnit&lt;/a&gt; and &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt;.&lt;/td&gt; --&gt; &lt;td align="right"&gt;Designed by ninjas!&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;hr size="1"/&gt; &lt;/xsl:template&gt;</code></pre><p>保存更改并从 eclipse 生成 JUnit 报告。</p><p><img alt="Title after customization" class="alignnone size-full wp-image-13085" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/15_CustomTitleAfter-1.jpg" height="336" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20773%20336'%3E%3C/svg%3E" width="773"/></p><noscript><img alt="Title after customization" class="alignnone size-full wp-image-13085" height="336" src="img/79f7da90cc8512a6f3a09a33020e5481.png" width="773"/><h2><strong>增加栈跟踪字体大小</strong></h2><p>我们在发生故障时看到的栈跟踪信息非常小,很难读取。 为了增加其字体大小,只需在模板中添加几行名称为 stylesheet.css 的行即可。</p><pre><code class="language-xml">&lt;xsl:template name="stylesheet.css"&gt; .StackTrace { font-size: 100%; }</code></pre><p>然后将该类添加到“ display-failures”模板的“ code”标签中,该模板负责显示栈跟踪信息。</p><h4><em>BEFORE</em></h4><pre><code class="language-xml">&lt;code &lt;xsl:call-template name="br-replace"&gt; &lt;xsl:with-param name="word" select="."/&gt; &lt;/xsl:call-template&gt; &lt;/code&gt;</code></pre><p><img alt="Stack trace before customization" class="alignnone size-full wp-image-13086" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/16_CustomStackTraceBefore-1.jpg" height="281" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20704%20281'%3E%3C/svg%3E" width="704"/></p><noscript><img alt="Stack trace before customization" class="alignnone size-full wp-image-13086" height="281" src="img/bb8d2d9cffa6c125da7d189e67916d17.png" width="704"/><h4>之后<i></i></h4><pre><code class="language-xml">&lt;code class="StackTrace"&gt; &lt;xsl:call-template name="br-replace"&gt; &lt;xsl:with-param name="word" select="."/&gt; &lt;/xsl:call-template&gt; &lt;/code&gt;</code></pre><p><img alt="Stack trace after customization" class="alignnone size-full wp-image-13083" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/17_CustomStackTraceAfter-1.jpg" height="308" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20744%20308'%3E%3C/svg%3E" width="744"/></p><noscript><img alt="Stack trace after customization" class="alignnone size-full wp-image-13083" height="308" src="img/aa339356190129736acc86ac3372a513.png" width="744"/><p>现在是时候戴上帽子了。 愿 ANT 的力量与您同在。</p><p>在另一篇文章中再见。 定制愉快!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/selenium/10d-advanced-webdriver-junit-report-customization-part2/" title="10d. Advanced WebDriver – JUnit Report Customization Contd."> 10d。 高级 WebDriver – JUnit 报告自定义续。 </a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
......@@ -51,4 +51,4 @@
![Before adding column](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20703%20219'%3E%3C/svg%3E)
<noscript><img alt="Before adding column" class="alignnone size-full wp-image-13133" height="219" src="img/84b0d9a3e774aca418746f37ade3cea2.png" width="703"/><h3>之后<em></em></h3><p><img alt="After adding a column" class="alignnone size-full wp-image-13134" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/19_CustomColAfter-1.jpg" height="226" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20776%20226'%3E%3C/svg%3E" width="776"/></p><noscript><img alt="After adding a column" class="alignnone size-full wp-image-13134" height="226" src="img/e4eeb80cc04eebc2a725bfb1f5fcb85b.png" width="776"/><h2>改变风格</h2><p>努力思考如何更改生成的报告中的样式? 无需为此费心! 因为和其他网页一样,我们也有一个 CSS 样式表来处理此报告的样式。 只需在“ junit-frames.xsl”文件中搜索名称为“ stylesheet.css”的模板即可。</p><pre><code class="language-xml">&lt;!-- this is the stylesheet css to use for nearly everything --&gt; &lt;xsl:template name="stylesheet.css"&gt;</code></pre><p>主体,表,标题,堆栈跟踪,错误,失败,段落,属性的样式均在此模板中指定。 继续前进,戴上帽子! 对 CSS 的每一行进行试验,并查看呈现的更改。 是的,您也可以添加自己的 CSS!</p><p><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"> </span> <span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"> <span class="ezoic-ad" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"> </span> </span>让我们来看一个入门的小例子。 表的详细信息和失败样式如下所示,</p><pre><code class="language-xml">table.details tr th{ font-weight: bold; text-align:left; background:#a6caf0; } .Failure { font-weight:bold; color:purple; }</code></pre><p>让我们将这些更改如下:</p><ol><li>所有表格标题均居中对齐</li><li>表格标题行的背景颜色为“绿色黄色”(#ADFF2F)</li><li>失败文字颜色变为栗色</li></ol><pre><code class="language-xml">table.details tr th{ font-weight: bold; text-align:center; background:#ADFF2F; } .Failure { font-weight:bold; color:maroon; }</code></pre><h3><em>BEFORE</em></h3><p><img alt="Before changing styles" class="alignnone size-full wp-image-13135" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/20_StylesBefore-1.jpg" height="458" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201095%20458'%3E%3C/svg%3E" width="1095"/></p><noscript><img alt="Before changing styles" class="alignnone size-full wp-image-13135" height="458" src="img/27f8f130e1cca67cd5d99f7988b85882.png" width="1095"/><h3><em>AFTER</em></h3><p><img alt="After changing the styles" class="alignnone size-full wp-image-13136" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/21_StylesAfter.jpg" height="437" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201058%20437'%3E%3C/svg%3E" width="1058"/></p><noscript><img alt="After changing the styles" class="alignnone size-full wp-image-13136" height="437" src="img/fe7ac3a7f76a08a05e580ed21c64bea7.png" width="1058"/><p>我知道,它看起来并不吸引眼球,但我们证明了我们想要的。 所以,你去了!</p><h2><strong>在标头部分</strong>中添加徽标</h2><p>我们大多数人都喜欢生成的报告上的徽标。 谁不喜欢个性化和一点营销? 如果您懂一点 HTML,就非常简单。 在名为“ pageHeader”的模板上,添加一个图像标签,并在 src 属性中指定路径。 我已将徽标图像放置在生成 index.html 文件的项目的“ junit”文件夹中。</p><pre><code class="language-xml">&lt;xsl:template name="pageHeader"&gt; &lt;!-- &lt;h1&gt;&lt;xsl:value-of select="$TITLE"/&gt;&lt;/h1&gt; --&gt; &lt;h1&gt;Custom JUnit Report&lt;/h1&gt; &lt;table width="100%"&gt; &lt;tr&gt; &lt;td align="left"&gt;&lt;/td&gt; &lt;td align="right"&gt;&lt;img width="50" height="50" alt="Selenium" src="myLogo.jpg"/&gt; Designed by ninjas!&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;hr size="1"/&gt; &lt;/xsl:template&gt;</code></pre><h3><em>结果</em></h3><p><img alt="Adding a Logo" class="alignnone size-full wp-image-13137" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/22_Logo.jpg" height="208" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201089%20208'%3E%3C/svg%3E" width="1089"/></p><noscript><img alt="Adding a Logo" class="alignnone size-full wp-image-13137" height="208" src="img/4d78e6dc472ceb1d9f1e11333fc47113.png" width="1089"/><p><strong>修改静态文本</strong></p><p>这是锦上添花(哦!您现在已经知道了)。 要修改报告中显示的任何静态文本,您只需在“ junit-frames.xsl”文件中进行更改。 是的,你没看错。 就这么简单!</p><p>假设在报告的摘要表中,而不是“测试”,我希望它是“测试数量”。 只需在 h2 标签上显示“摘要”的正文部分更改文本,</p><pre><code class="language-xml">&lt;table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"&gt; &lt;tr valign="top"&gt; &lt;th&gt;Number of Tests&lt;/th&gt; &lt;th&gt;Failures&lt;/th&gt; &lt;th&gt;Errors&lt;/th&gt; &lt;th&gt;Skipped&lt;/th&gt; &lt;th&gt;Success rate&lt;/th&gt; &lt;th&gt;Time&lt;/th&gt; &lt;/tr&gt;</code></pre><h3><em>RESULT</em></h3><p><img alt="Modifying static text" class="alignnone size-full wp-image-13132" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/23_staticText.jpg" height="243" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201028%20243'%3E%3C/svg%3E" width="1028"/></p><noscript><img alt="Modifying static text" class="alignnone size-full wp-image-13132" height="243" src="img/95e2e8910446d894375595f166f57c3f.png" width="1028"/><p>是时候对我们到目前为止所学到的东西进行反思。</p><p>在另一篇文章中再见。 定制愉快!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/selenium/10e-advanced-webdriver-generating-pdf-report/" title="10e. Advanced WebDriver – Generating a PDF report"> 10e。 Advanced WebDriver – 生成 PDF 报告</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
<noscript><img alt="Before adding column" class="alignnone size-full wp-image-13133" height="219" src="img/84b0d9a3e774aca418746f37ade3cea2.png" width="703"/><h3>之后<em></em></h3><p><img alt="After adding a column" class="alignnone size-full wp-image-13134" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/19_CustomColAfter-1.jpg" height="226" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20776%20226'%3E%3C/svg%3E" width="776"/></p><noscript><img alt="After adding a column" class="alignnone size-full wp-image-13134" height="226" src="img/e4eeb80cc04eebc2a725bfb1f5fcb85b.png" width="776"/><h2>改变风格</h2><p>努力思考如何更改生成的报告中的样式? 无需为此费心! 因为和其他网页一样,我们也有一个 CSS 样式表来处理此报告的样式。 只需在“ junit-frames.xsl”文件中搜索名称为“ stylesheet.css”的模板即可。</p><pre><code class="language-xml">&lt;!-- this is the stylesheet css to use for nearly everything --&gt; &lt;xsl:template name="stylesheet.css"&gt;</code></pre><p>主体,表,标题,栈跟踪,错误,失败,段落,属性的样式均在此模板中指定。 继续前进,戴上帽子! 对 CSS 的每一行进行试验,并查看呈现的更改。 是的,您也可以添加自己的 CSS!</p><p><span class="ezoic-adpicker-ad" id="ezoic-pub-ad-placeholder-124"> </span> <span class="ezoic-ad box-4 adtester-container adtester-container-124" data-ez-name="javabeginnerstutorial_com-box-4" style="display:block !important;float:none;margin-bottom:2px !important;margin-left:0px !important;margin-right:0px !important;margin-top:2px !important;min-height:110px;min-width:728px;text-align:center !important;"> <span class="ezoic-ad" ezah="90" ezaw="728" id="div-gpt-ad-javabeginnerstutorial_com-box-4-0" style="position:relative;z-index:0;display:inline-block;min-height:90px;min-width:728px;"> </span> </span>让我们来看一个入门的小例子。 表的详细信息和失败样式如下所示,</p><pre><code class="language-xml">table.details tr th{ font-weight: bold; text-align:left; background:#a6caf0; } .Failure { font-weight:bold; color:purple; }</code></pre><p>让我们将这些更改如下:</p><ol><li>所有表格标题均居中对齐</li><li>表格标题行的背景颜色为“绿色黄色”(#ADFF2F)</li><li>失败文字颜色变为栗色</li></ol><pre><code class="language-xml">table.details tr th{ font-weight: bold; text-align:center; background:#ADFF2F; } .Failure { font-weight:bold; color:maroon; }</code></pre><h3><em>BEFORE</em></h3><p><img alt="Before changing styles" class="alignnone size-full wp-image-13135" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/20_StylesBefore-1.jpg" height="458" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201095%20458'%3E%3C/svg%3E" width="1095"/></p><noscript><img alt="Before changing styles" class="alignnone size-full wp-image-13135" height="458" src="img/27f8f130e1cca67cd5d99f7988b85882.png" width="1095"/><h3><em>AFTER</em></h3><p><img alt="After changing the styles" class="alignnone size-full wp-image-13136" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/21_StylesAfter.jpg" height="437" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201058%20437'%3E%3C/svg%3E" width="1058"/></p><noscript><img alt="After changing the styles" class="alignnone size-full wp-image-13136" height="437" src="img/fe7ac3a7f76a08a05e580ed21c64bea7.png" width="1058"/><p>我知道,它看起来并不吸引眼球,但我们证明了我们想要的。 所以,你去了!</p><h2><strong>在标头部分</strong>中添加徽标</h2><p>我们大多数人都喜欢生成的报告上的徽标。 谁不喜欢个性化和一点营销? 如果您懂一点 HTML,就非常简单。 在名为“ pageHeader”的模板上,添加一个图像标签,并在 src 属性中指定路径。 我已将徽标图像放置在生成 index.html 文件的项目的“ junit”文件夹中。</p><pre><code class="language-xml">&lt;xsl:template name="pageHeader"&gt; &lt;!-- &lt;h1&gt;&lt;xsl:value-of select="$TITLE"/&gt;&lt;/h1&gt; --&gt; &lt;h1&gt;Custom JUnit Report&lt;/h1&gt; &lt;table width="100%"&gt; &lt;tr&gt; &lt;td align="left"&gt;&lt;/td&gt; &lt;td align="right"&gt;&lt;img width="50" height="50" alt="Selenium" src="myLogo.jpg"/&gt; Designed by ninjas!&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;hr size="1"/&gt; &lt;/xsl:template&gt;</code></pre><h3><em>结果</em></h3><p><img alt="Adding a Logo" class="alignnone size-full wp-image-13137" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/22_Logo.jpg" height="208" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201089%20208'%3E%3C/svg%3E" width="1089"/></p><noscript><img alt="Adding a Logo" class="alignnone size-full wp-image-13137" height="208" src="img/4d78e6dc472ceb1d9f1e11333fc47113.png" width="1089"/><p><strong>修改静态文本</strong></p><p>这是锦上添花(哦!您现在已经知道了)。 要修改报告中显示的任何静态文本,您只需在“ junit-frames.xsl”文件中进行更改。 是的,你没看错。 就这么简单!</p><p>假设在报告的摘要表中,而不是“测试”,我希望它是“测试数量”。 只需在 h2 标签上显示“摘要”的正文部分更改文本,</p><pre><code class="language-xml">&lt;table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"&gt; &lt;tr valign="top"&gt; &lt;th&gt;Number of Tests&lt;/th&gt; &lt;th&gt;Failures&lt;/th&gt; &lt;th&gt;Errors&lt;/th&gt; &lt;th&gt;Skipped&lt;/th&gt; &lt;th&gt;Success rate&lt;/th&gt; &lt;th&gt;Time&lt;/th&gt; &lt;/tr&gt;</code></pre><h3><em>RESULT</em></h3><p><img alt="Modifying static text" class="alignnone size-full wp-image-13132" data-lazy-src="https://javabeginnerstutorial.com/wp-content/uploads/2018/05/23_staticText.jpg" height="243" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201028%20243'%3E%3C/svg%3E" width="1028"/></p><noscript><img alt="Modifying static text" class="alignnone size-full wp-image-13132" height="243" src="img/95e2e8910446d894375595f166f57c3f.png" width="1028"/><p>是时候对我们到目前为止所学到的东西进行反思。</p><p>在另一篇文章中再见。 定制愉快!</p><div class="sticky-nav" style="font-size: 15px;"><div class="sticky-nav-image"></div><div class="sticky-nav-holder"><div class="sticky-nav_item"><h6 class="heading-sm">下一篇文章</h6></div><h5 class="sticky-nav_heading " style="font-size: 15px;"><a href="https://javabeginnerstutorial.com/selenium/10e-advanced-webdriver-generating-pdf-report/" title="10e. Advanced WebDriver – Generating a PDF report"> 10e。 Advanced WebDriver – 生成 PDF 报告</a></h5></div></div> </body> </html></noscript>
\ No newline at end of file
......@@ -15,7 +15,7 @@
* 开启 Chrome 浏览器。
* 导航到[演示站点](https://chandanachaitanya.github.io/selenium-practice-site/)
* 为 Logger 类创建一个实例
* 将“打开实践网站”登录到 test.log
* 将“打开 Selenium 实践网站”登录到 test.log
* 按名称找到“自行车”复选框,然后单击它
* 记录“选择了自行车复选框”
* 使用 cssSelector 找到“杂志”单选按钮并选择它
......
......@@ -10,7 +10,7 @@
在 Python 中,异常称为错误,使开发人员从其他语言进行迁移会造成混淆。 基本错误类是 Exception,其他异常是该类的子类-这使事情更加混乱。
每次引发异常时,它都会进入调用栈,直到代码块对其进行处理。 如果没有代码可以处理该异常,则解释器将接管工作,写出讨厌的错误消息并终止正在运行的脚本。
每次引发异常时,它都会进入调用栈,直到代码块对其进行处理。 如果没有代码可以处理该异常,则解释器将接管工作,写出讨厌的错误消息并终止正在运行的脚本。
自然地,在错误处理块中,您可以引发一个新异常或将当前异常抛出到顶部。 这是 Web 应用中的常见做法,在 Web 应用中,您希望记录服务调用导致了异常,但是您也想通过用户界面通知用户错误。 为此,您必须转发异常。
......
......@@ -611,7 +611,7 @@ Authors: Multiple
作者:斯科特·罗宾逊
资料来源:[滥用栈网站](http://stackabuse.com/python-generators/)
资料来源:[滥用栈网站](http://stackabuse.com/python-generators/)
标题:Python 实践手册 – 第 5 章。迭代器&生成器
......
......@@ -66,7 +66,7 @@ ArrayIndexOutOfBounds 异常。
### 异常传播
不需要处理 catch 块中 try 块引发的所有异常(因为它不是必需的块)。 如果 catch 块无法处理 try 块引发的异常,它将传播到调用此方法的方法中。 如果先前调用此方法的方法也无法处理该异常,则该异常将传播到方法堆栈中的最后一个方法,除非某些方法处理该异常,否则它将以相同的方式传播。 如果没有方法在调用堆栈中处理它,则异常将触底,而 JVM 将对其进行处理。
不需要处理 catch 块中 try 块引发的所有异常(因为它不是必需的块)。 如果 catch 块无法处理 try 块引发的异常,它将传播到调用此方法的方法中。 如果先前调用此方法的方法也无法处理该异常,则该异常将传播到方法栈中的最后一个方法,除非某些方法处理该异常,否则它将以相同的方式传播。 如果没有方法在调用栈中处理它,则异常将触底,而 JVM 将对其进行处理。
(感谢 Mohita 的建议)
......
......@@ -122,7 +122,7 @@ returning from finally block
## 捕获多个异常
在 Java 7 之前,为了处理多个异常,使用了多个 catch 块(从最特定到最普通)。 编写代码是为了打印栈跟踪,执行错误恢复,链接异常,允许用户做出决定等。但是编写多个 catch 块包含许多**重复代码**。 另外,程序员倾向于捕获更广泛或更普遍的异常,而不是特定的异常。 例如,捕获 IOException 而不是 FileNotFoundException。
在 Java 7 之前,为了处理多个异常,使用了多个 catch 块(从最特定到最普通)。 编写代码是为了打印栈跟踪,执行错误恢复,链接异常,允许用户做出决定等。但是编写多个 catch 块包含许多**重复代码**。 另外,程序员倾向于捕获更广泛或更普遍的异常,而不是特定的异常。 例如,捕获 IOException 而不是 FileNotFoundException。
**Java SE 7 和更高版本**起,这些缺陷已通过**单捕获块**解决,该块可以**处理多种类型的异常**。 在这里,要处理的异常类型在以竖线(|)分隔的 catch 子句的主题中指定。
......
......@@ -126,7 +126,7 @@ List l = new ArrayList<E>();
* 元素彼此双重链接。
* 按索引位置排序
* 适用于实现栈和队列
* 适用于实现栈和队列
* 快速插入和删除
* * *
......@@ -207,7 +207,7 @@ List l = new ArrayList<E>();
7. **队列**:按 **FIFO****优先级**进行排序。
8. **`ArrayList`**:快速迭代&快速随机访问。
9. **`Vector`**:同步方法。
10. **`LinkedList`**:适用于实现栈和队列。
10. **`LinkedList`**:适用于实现栈和队列。
11. **`HashSet`**:快速访问,没有重复,没有排序。
12. **`LinkedHashSet`**:没有重复,按插入顺序进行迭代。
13. **`TreeSet`**:无重复,按排序顺序进行迭代。
......
此差异已折叠。
......@@ -7,7 +7,7 @@
**java.lang.Thread* 的实例
* 执行线程
线程的*实例是一个对象,与 Java 中的其他任何对象一样,它包含在堆上生存和死亡的变量和方法。 但是*执行线程*是一个单独的进程,具有其**调用** 。 即使您没有在程序中创建任何线程,一个线程也将在其中运行,然后 *main()*方法将启动该线程。*
线程的*实例是一个对象,与 Java 中的其他任何对象一样,它包含在堆上生存和死亡的变量和方法。 但是*执行线程*是一个单独的进程,具有其**调用** 。 即使您没有在程序中创建任何线程,一个线程也将在其中运行,然后 *main()*方法将启动该线程。*
**注意**:如果是线程,大多数事情都是不可预测的。
......@@ -110,14 +110,14 @@ Thread(Runnable target, String name)
Thread(String name)
```
到目前为止,我们已经创建了一个 Thread 对象,并且它知道以 run()方法的形式做什么。 但是到目前为止,它仍然是一个对象。 它没有调用堆栈。 换句话说,执行线程尚未启动。 仅当在线程上调用 start()方法时,线程对象才会具有其堆栈。
到目前为止,我们已经创建了一个 Thread 对象,并且它知道以 run()方法的形式做什么。 但是到目前为止,它仍然是一个对象。 它没有调用栈。 换句话说,执行线程尚未启动。 仅当在线程上调用 start()方法时,线程对象才会具有其栈。
到目前为止,线程具有两种状态。
* 新状态(已创建线程对象,但未调用 Start 方法)
* 可运行(活动)状态(调用启动方法)
> 直接从 Java 代码调用 run()方法意味着您正在调用方法,并且不会创建栈。
> 直接从 Java 代码调用 run()方法意味着您正在调用方法,并且不会创建栈。
当线程处于可运行状态时,表示已创建线程,但尚未执行该线程的 run 方法,并且该线程正在等待轮到他。 选定线程后,线程的 run 方法将执行,该状态称为运行状态。
......
......@@ -4,7 +4,7 @@
JVM 是 Java 虚拟机的缩写形式。 它是一个 Java 字节码处理引擎,它将 Java 字节码转换为机器语言,然后由机器(计算机)执行。 Java 字节码是 Java 与必须在其上执行程序的机器之间的中间语言,并且当 JVM 将 Java 字节码处理为机器语言时,可以执行此执行。
**JVM 用简单的词**
**JVM 简介**
让我们用简单的词来理解 Java 字节码,JVM 和 Machine 的概念。
......@@ -18,9 +18,9 @@ Java 由于具有 JVM 而与平台无关,但是 JVM 与平台有关。 必须
**JVM 的组件**
在解释和执行 Java 字节码时,JVM 使用了几个组件,例如栈,寄存器,垃圾收集器等。 让我们看一下它的一些组成部分:
在解释和执行 Java 字节码时,JVM 使用了几个组件,例如栈,寄存器,垃圾收集器等。 让我们看一下它的一些组成部分:
* **栈**:它是方法参数和局部变量的仓库。 可以在指向寄存器不同部分的寄存器的帮助下对其进行操作。
* **寄存器**:JVM 中有许多寄存器,例如 Vars,Frame,Program Counter 和 OpTop。 Vars 寄存器指向当前方法正在使用的局部变量。 框架寄存器指向执行环境,这是用于堆栈的环境。 Optop 指向操作数堆栈,在其中执行字节码指令。 程序计数器寄存器指向保存字节码的“方法”区域。
* **栈**:它是方法参数和局部变量的仓库。 可以在指向寄存器不同部分的寄存器的帮助下对其进行操作。
* **寄存器**:JVM 中有许多寄存器,例如 Vars,Frame,Program Counter 和 OpTop。 Vars 寄存器指向当前方法正在使用的局部变量。 框架寄存器指向执行环境,这是用于栈的环境。 Optop 指向操作数栈,在其中执行字节码指令。 程序计数器寄存器指向保存字节码的“方法”区域。
* **方法区域**:它是 Java 字节码的占位符。 该区域在所有线程之间共享,因此可以确保同步。
* **垃圾收集器**:它是 JVM 的组件,用于存储实际的 Java 对象。 请注意,Java 对象的引用存储在堆栈中,而实际对象存储在垃圾收集器中。 Java 使用垃圾回收来释放分配给不同对象的内存,这与 C / C++ 不同,在 C / C++ 中,运算符用于释放内存。
\ No newline at end of file
* **垃圾收集器**:它是 JVM 的组件,用于存储实际的 Java 对象。 请注意,Java 对象的引用存储在栈中,而实际对象存储在垃圾收集器中。 Java 使用垃圾回收来释放分配给不同对象的内存,这与 C / C++ 不同,在 C / C++ 中,运算符用于释放内存。
\ No newline at end of file
......@@ -6,7 +6,7 @@
应用中的所有类文件在启动时都不会加载到内存中,而是根据程序的需要按需加载,此类的加载是由 ClassLoader 完成的。 ClassLoader 是 JVM 的一部分,可将类加载到内存中。
Java ClassLoader 是用 Java 本身编写的(*与以 C++ * 编写的 JVM 相反)。 这意味着在需要时可以轻松开发自定义 Class Loader,而无需了解 JVM 的细节。 ClassLoader 是一个抽象类,它是 java.lang 包的一部分。
Java ClassLoader 是用 Java 本身编写的(与以 *C++* 编写的 JVM 相反)。 这意味着在需要时可以轻松开发自定义 Class Loader,而无需了解 JVM 的细节。 ClassLoader 是一个抽象类,它是 java.lang 包的一部分。
* * *
......@@ -41,7 +41,7 @@ Java ClassLoader 可以分为 4 种类型。
### 系统类加载器
系统 ClassLoader 将在 classpath( *java.class.path 属性*)中加载类。 扩展 ClassLoader 作为 System ClassLoader 的父级。 类路径的默认值是当前目录,但是可以用不同的方式更改此值。
系统 ClassLoader 将在 classpath(`java.class.path`属性)中加载类。 扩展 ClassLoader 作为 System ClassLoader 的父级。 类路径的默认值是当前目录,但是可以用不同的方式更改此值。
1. 设置 CLASSPATH 环境变量。
2. 通过-classpath 或-cp 命令行选项提供的值。
......
......@@ -5,9 +5,8 @@
## Java 虚拟机。 怎么运行的?
* 首先 jvm 在类中查找 main 方法。如果存在,它将从该处开始执行
* 在 Java 虚拟机内部,线程有两种形式: ***守护程序*** **和*非守护程序*** 。 守护程序线程通常是虚拟机本身使用的线程,例如执行**垃圾** **集合**的线程。 但是,该应用可以将其创建的任何线程标记为守护程序线程。 应用的初始线程(从 main()开始的线程)是非守护程序线程。
* 在 Java 虚拟机内部,线程有两种形式:**守护程序****非守护程序**。 守护程序线程通常是虚拟机本身使用的线程,例如执行**垃圾收集**的线程。 但是,该应用可以将其创建的任何线程标记为守护程序线程。 应用的初始线程(从 main()开始的线程)是非守护程序线程。
* 只要任何非守护程序线程仍在运行,Java 应用就会继续执行(虚拟机实例继续运行)。 Java 应用的所有非守护程序线程都终止时,虚拟机实例将退出。 如果得到安全管理者的允许,则应用还可以通过调用 Runtime 或 System 类的 exit()方法来使其自身灭亡。
**[** ![](data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20670%20299'%3E%3C/svg%3E)
<noscript><img alt="" height="299" src="img/84ced9a2cb730f97cce54806e6a7946b.png" width="670"/><p align="center"><strong> </strong></p><p align="center"><strong> Java 虚拟机的体系结构</strong></p><li>所有的 JVM 都包含两个组成部分</li><p style="padding-left: 60px;"><em> <span style="text-decoration: underline;">类加载器子系统</span> </em> <span style="text-decoration: underline;"></span>一种机制,用于加载具有完全限定名称的类型(类和接口)。</p><p style="padding-left: 60px;"><em> <span style="text-decoration: underline;">执行引擎</span> </em>:一种机制,负责执行已加载类的方法中包含的指令。</p><li style="text-align: justify;">当 Java 虚拟机运行程序时,它需要内存来存储许多东西,包括字节码,已加载的类文件中的信息,程序实例化的对象,方法的参数,返回值,局部变量以及中间的计算结果。</li><li style="text-align: justify;">虚拟机的不同实现可能具有非常不同的内存限制。 一些实现可能需要大量内存才能工作,而其他实现可能很少。 一些实现可能能够利用虚拟内存,而其他一些则不能。 运行时数据区规范的抽象性质有助于简化在各种计算机和设备上实现 Java 虚拟机的过程。</li><li style="text-align: justify;">不同的 Java 程序具有不同的 jvm 实例。 如果我执行一个类,则一个单独的 jvm 实例将处理该类</li><li style="text-align: justify;">当虚拟机加载类文件时,它会从类文件中包含的二进制数据中解析有关类型的信息。 它将类型信息放入方法区域,将程序实例化的所有对象放入堆。</li><li style="text-align: justify;">随着每个新线程的出现,它获得了自己的<em> pc 寄存器</em>(程序计数器)和<em> Java 堆栈</em>。 如果线程正在执行 Java 方法(不是本机方法),则 pc 寄存器的值指示要执行的下一条指令。 线程的 Java 堆栈存储该线程的 Java(非本机)方法调用状态。</li><li style="text-align: justify;">Java 堆栈由<em>堆栈帧</em>(或<em></em>)组成。 堆栈框架包含一个 Java 方法调用的状态。 当线程调用方法时,Java 虚拟机将新框架推送到该线程的 Java 堆栈上。 该方法完成后,虚拟机将弹出并丢弃该方法的帧</li><li style="text-align: justify;">Java 虚拟机包含两种类加载器:java.lang.ClassLoader</li><h3>b <em> ootstrap 类加载器,用户定义的类加载器</em></h3><li style="text-align: justify;">正在运行的程序的每个线程都有其自己的<strong>程序计数器</strong>寄存器或程序计数器,它们是在线程启动时创建的。 pc 寄存器的大小为一个字,因此它既可以保存本机指针,也可以保存 returnAddress。 当线程执行 Java 方法时,pc 寄存器包含该线程正在执行的当前指令的地址。 “地址”可以是本机指针,也可以是方法字节码开头的偏移量。 如果线程正在执行本机方法,则 pc 寄存器的值未定义。</li><li>这里有两叠</li><p><em> <strong> Java 堆栈:</strong> </em>由 JVM 维护,</p><p><em> <strong>本机堆栈:</strong> </em>取决于。</p><p>大家好,请评论我的帖子。 如果我的帖子有任何问题,请随时进行纠正,谢谢。</p><p> </p> </body> </html></noscript>
\ No newline at end of file
<noscript><img alt="" height="299" src="img/84ced9a2cb730f97cce54806e6a7946b.png" width="670"/><p align="center"><strong> </strong></p><p align="center"><strong> Java 虚拟机的体系结构</strong></p><li>所有的 JVM 都包含两个组成部分</li><p style="padding-left: 60px;"><em> <span style="text-decoration: underline;">类加载器子系统</span> </em> <span style="text-decoration: underline;"></span>一种机制,用于加载具有完全限定名称的类型(类和接口)。</p><p style="padding-left: 60px;"><em> <span style="text-decoration: underline;">执行引擎</span> </em>:一种机制,负责执行已加载类的方法中包含的指令。</p><li style="text-align: justify;">当 Java 虚拟机运行程序时,它需要内存来存储许多东西,包括字节码,已加载的类文件中的信息,程序实例化的对象,方法的参数,返回值,局部变量以及中间的计算结果。</li><li style="text-align: justify;">虚拟机的不同实现可能具有非常不同的内存限制。 一些实现可能需要大量内存才能工作,而其他实现可能很少。 一些实现可能能够利用虚拟内存,而其他一些则不能。 运行时数据区规范的抽象性质有助于简化在各种计算机和设备上实现 Java 虚拟机的过程。</li><li style="text-align: justify;">不同的 Java 程序具有不同的 jvm 实例。 如果我执行一个类,则一个单独的 jvm 实例将处理该类</li><li style="text-align: justify;">当虚拟机加载类文件时,它会从类文件中包含的二进制数据中解析有关类型的信息。 它将类型信息放入方法区域,将程序实例化的所有对象放入堆。</li><li style="text-align: justify;">随着每个新线程的出现,它获得了自己的<em> pc 寄存器</em>(程序计数器)和<em> Java 栈</em>。 如果线程正在执行 Java 方法(不是本机方法),则 pc 寄存器的值指示要执行的下一条指令。 线程的 Java 栈存储该线程的 Java(非本机)方法调用状态。</li><li style="text-align: justify;">Java 栈由<em>栈帧</em>(或<em></em>)组成。 栈框架包含一个 Java 方法调用的状态。 当线程调用方法时,Java 虚拟机将新框架推送到该线程的 Java 栈上。 该方法完成后,虚拟机将弹出并丢弃该方法的帧</li><li style="text-align: justify;">Java 虚拟机包含两种类加载器:java.lang.ClassLoader</li><h3>b <em> ootstrap 类加载器,用户定义的类加载器</em></h3><li style="text-align: justify;">正在运行的程序的每个线程都有其自己的<strong>程序计数器</strong>寄存器或程序计数器,它们是在线程启动时创建的。 pc 寄存器的大小为一个字,因此它既可以保存本机指针,也可以保存 returnAddress。 当线程执行 Java 方法时,pc 寄存器包含该线程正在执行的当前指令的地址。 “地址”可以是本机指针,也可以是方法字节码开头的偏移量。 如果线程正在执行本机方法,则 pc 寄存器的值未定义。</li><li>这里有两叠</li><p><em> <strong> Java 栈:</strong> </em>由 JVM 维护,</p><p><em> <strong>本机栈:</strong> </em>取决于。</p><p>大家好,请评论我的帖子。 如果我的帖子有任何问题,请随时进行纠正,谢谢。</p><p> </p> </body> </html></noscript>
\ No newline at end of file
# 硒教程
\ No newline at end of file
# Selenium 教程
\ No newline at end of file
# 1.什么是
# 1.什么是 Selenium
> 原文: [https://javabeginnerstutorial.com/selenium/1-what-selenium/](https://javabeginnerstutorial.com/selenium/1-what-selenium/)
Hiya 让我们进入 **硒**的酷炫**世界。 我一直说很多次,不是吗? 那么,为什么不了解这个世界是什么,以便您可以告诉我世界是否如此。 此外,这将是一个简短的!**
Hiya 让我们进入 **Selenium 的酷炫世界**。 我一直说很多次,不是吗? 那么,为什么不了解这个世界是什么,以便您可以告诉我世界是否如此。 此外,这将是一个简短的!
在开始编写严肃的测试脚本并在浏览器上看到神奇的事物之前,让我们看一下 Selenium 的一般含义,以便我们可以根据需要有效地使用它。
**Selenium** 是用于**自动化和测试 Web 应用的一组工具。** 就这么简单!
**Selenium** 是用于**自动化和测试 Web 应用的一组工具** 就这么简单!
由于它不是单个工具,因此称为 **Suite** 。 我们有整篇文章专门介绍这些强大的工具,这些工具旨在满足不同的测试和测试环境要求。
由于它不是单个工具,因此称为**套件**。 我们有整篇文章专门介绍这些强大的工具,这些工具旨在满足不同的测试和测试环境要求。
为了更深入和更好地理解,请将 Selenium 视为网络浏览器的 API,即**操纵其中的元素**。 更好的是,这就像您能够对 Firefox 或 Chrome 或 IE 等进行编程,以使重复的手动测试用例自动化。 您可能想知道如何定位和捕获所需的 Web 或 UI 元素,但是必须等待更长的时间才能解密!
***BrainBell*** *(就像杠铃一样,呼呼!)****:大脑为我们提供了很多帮助! 当我们努力学习某些东西时,我们的大脑会通过确保学习不会持续进行来帮忙。 是的,难过,但真实。 它将使我们想起所有其他重要的事情,这些事情使您进行 ALT + TAB 或留出充足的空间。 因此,我们有必要欺骗我们的大脑,使他们认为生命取决于对硒及其世界的了解。 **重复**(其中一种技巧,虽然有点无聊,但仍然如此)以不同的方式说同一件事,增加了将内容编码到大脑多个区域的机会。*
**BrainBell**:大脑为我们提供了很多帮助! 当我们努力学习某些东西时,我们的大脑会通过确保学习不会持续进行来帮忙。 是的,难过,但真实。 它将使我们想起所有其他重要的事情,这些事情使您进行 ALT + TAB 或留出充足的空间。 因此,我们有必要欺骗我们的大脑,使他们认为生命取决于对 Selenium 及其世界的了解。 **重复**(其中一种技巧,虽然有点无聊,但仍然如此)以不同的方式说同一件事,增加了将内容编码到大脑多个区域的机会。
回来了,那么,什么使这个世界在测试专业人​​士中变得更加流行和最受欢迎? 它是**开源**,因此是免费的,它使您能够在**多个浏览器平台**上运行测试。
回来了,那么,什么使这个世界在测试专业人​​士中变得更加流行和最受欢迎? 它是**开源**,因此是免费的,它使您能够在**多个浏览器平台**上运行测试。
希望您现在同意这个世界是一个很酷的地方! 话虽如此,在另一篇文章中再见。
......
......@@ -4,7 +4,7 @@
欢迎回到勇士们! 我知道您整天都在测试应用/系统,如果有的话,寻找错误。 从而确保承诺的质量。
此外,您还会听说过“ **自动测试**”一词。 让我们看看它的含义以及我们为什么要真正关心它。 此外,为什么还要花费宝贵的**时间和精力**创建自动化测试? (*在这里告诉我一个秘密:*尽管我们使用一种工具来实现自动化,但是肯定要付出很大的努力。因此,只有在值得我们努力的情况下,我们才可以涉足这一领域!)
此外,您还会听说过“**自动测试**”一词。 让我们看看它的含义以及我们为什么要真正关心它。 此外,为什么还要花费宝贵的**时间和精力**创建自动化测试? (*在这里告诉我一个秘密:*尽管我们使用一种工具来实现自动化,但是肯定要付出很大的努力。因此,只有在值得我们努力的情况下,我们才可以涉足这一领域!)
**内容**:自动测试是指借助工具自动执行手动过程以测试被测应用/系统的过程。
......@@ -12,19 +12,19 @@
**何时**变得有利?
1. **回归测试** – 想象一下,系统中已经创建了功能,并且已经过测试。 在稍后的某个时间点,有一些更改会影响现有代码或引入新功能。 因此,现有的已经测试过的零件可能无法按预期工作,或者更糟,发生故障。 如果这种情况在生产环境中发生,并且您的客户之一对此表示抱怨,那是什么条件? 您甚至可以想象发生这样的事情吗? 听起来令人恐惧吧? 为了您的急救,我们这里有。 我们可以使用 Selenium 创建一个自动化测试的回归套件,并且每次引入更改或新功能时,都可以运行该套件,而无需进行任何额外的工作(在敏捷过程中,每个 sprint 结束时) 确保没有任何损坏。
1. **回归测试** – 想象一下,系统中已经创建了功能,并且已经过测试。 在稍后的某个时间点,有一些更改会影响现有代码或引入新功能。 因此,现有的已经测试过的零件可能无法按预期工作,或者更糟,发生故障。 如果这种情况在生产环境中发生,并且您的客户之一对此表示抱怨,那是什么条件? 您甚至可以想象发生这样的事情吗? 听起来令人恐惧吧? 为了您的急救,我们这里有 Selenium。 我们可以使用 Selenium 创建一个自动化测试的回归套件,并且每次引入更改或新功能时,都可以运行该套件,而无需进行任何额外的工作(在敏捷过程中,每个 sprint 结束时) 确保没有任何损坏。
2. **高级测试** – 单元测试可用于测试单个组件(类级别),集成测试可用于测试事物在类间级别上的工作方式。 对于 Web 应用,最后的座右铭是找出浏览器是否按照客户希望的方式正常工作。 使用 Selenium,我们可以像用户/客户一样执行测试!
3. **组合测试** – 让我们以一个包含三组,每组具有三个单选按钮的网页为例。 手动测试所有组合可能会花费大量时间,但是以编程方式可以轻松完成,并且无需人工干预即可在一夜之间进行测试。
4. **确切要求** – 手动编写的测试步骤可能不明确。 一个测试人员可能会测试并声明它已通过,但另一个测试人员可能会说失败了。 自动化测试具有非常确定的结果。 因此,无论开发人员是谁,都对开发人员和您的应用提出了确切的要求。 它或者通过或者失败。 而已!
4. **明确要求** – 手动编写的测试步骤可能不明确。 一个测试人员可能会测试并声明它已通过,但另一个测试人员可能会说失败了。 自动化测试具有非常确定的结果。 因此,无论开发人员是谁,都对开发人员和您的应用提出了确切的要求。 它或者通过或者失败。 而已!
5. **可以在某些测试框架的帮助下生成自定义报告**和屏幕截图,当开发人员或其他项目涉众期望快速反馈时,这将非常有用。
6. 一旦安装了测试脚本并设置了测试环境,就可以执行任意数量的测试执行**迭代**
7. 可以执行这些自动测试的**速度**非常高。 因此,在频繁发布的情况下,自动化成为一个很好的解决方案。
8. 当需要并行执行时,自动化是可取的。
9. 由于避免了人为错误(可能随着时间的推移而使重复任务变得无聊而导致的错误),因此**准确性**和质量得以提高。
**哪个**可能是基于 Web 的自动化中使用最广泛的开源解决方案? – 拜托,显然是**硒!**
**哪个**可能是基于 Web 的自动化中使用最广泛的开源解决方案? – 拜托,显然是 **Selenium**
有了这些知识,在另一篇文章中再见,以了解的历史。
有了这些知识,在另一篇文章中再见,以了解 Selenium 的历史。
祝你有美好的一天!
# 3.的历史
# 3.Selenium 的历史
> 原文: [https://javabeginnerstutorial.com/selenium/3-history-selenium/](https://javabeginnerstutorial.com/selenium/3-history-selenium/)
......@@ -6,22 +6,22 @@ iya! 准备过去一段时间吗? 准备好被今天要出土的宝石所震
很久以前,在 2004 年,有一个来自芝加哥 ThoughtWorks 的人叫 Jason Huggins。 他将 Selenium 的**核心**模式构建为“ JavaScriptTestRunner”,以验证他正在测试的 Web 应用,时间和费用应用的行为。 他以一种人们可以使用 HTML 文件中的关键字驱动方法编写测试的方式来构建它。
慢慢地,他开始向大量受众展示他的工具的演示。 不久,人们开始讨论将该工具开源,并使其成为可重用的框架,以使其他此类基于 Web 的应用自动化。 这就是 **Selenium Core** 的故事。
慢慢地,他开始向大量受众展示他的工具的演示。 不久,人们开始讨论将该工具开源,并使其成为可重用的框架,以使其他此类基于 Web 的应用自动化。 这就是 **Selenium** 核心的故事。
不过,Core 还是有一些限制,例如“原产地政策”。 好的大字警报! 首先,让我们了解一下原点是什么。
来源不过是 URL 的方案,主机和端口。 因此,根据该策略,由于主机不同,因此不允许尝试访问从 http://abc.org/sample.html 检索的文档的 DOM 来检索文档。 另一个示例,我从 http://example.com/(端口:80)启动了一个 JavaScript 程序,由于端口不同,根据此策略,https://example.com(端口:443)变得不可访问。
现在,又有一个来自 ThoughtWorks 的名叫 Paul Hammant 的人通过提出 **Selenium 1****Selenium RC** (远程控制)来规避此限制。 它具有一个 Selenium 客户端和一个 Selenium 服务器。 客户端将命令发送到服务器,并且该服务器将使用 JavaScript 驱动浏览器。 因此,它不会直接挂钩到任何浏览器 API。 它还支持多种编程语言,我们将在后面详细介绍。
现在,又有一个来自 ThoughtWorks 的名叫 Paul Hammant 的人通过提出 **Selenium 1****Selenium RC**(远程控制)来规避此限制。 它具有一个 Selenium 客户端和一个 Selenium 服务器。 客户端将命令发送到服务器,并且该服务器将使用 JavaScript 驱动浏览器。 因此,它不会直接挂钩到任何浏览器 API。 它还支持多种编程语言,我们将在后面详细介绍。
现在到下一个! **Selenium IDE** 不仅是最简单,最简单的工具,而且是在 Selenium Suite 中提供最少自动化编程脚本所需的最少编程知识的唯一工具。 我知道您会很想知道谁提出了这个宝石。 顺便说一下,这是“日本制造”的产品。 开发此工具的功劳归功于 Shinya Kasatani。 他是意识到 Selenium Core 代码可以包装到 IDE(集成开发环境)模块中并可以插入 Firefox 浏览器的人。 它具有记录和播放功能,比您期望的要酷! 让我们将其保存以备后用。
在 2007 年前后,ThoughtWorks 的另一个名叫 Simon Stewart 的人正在开发另一个名为 **WebDriver** 的 Web 测试工具,该工具不依赖 JavaScript。 与 Selenium RC 相比,它不仅为每个浏览器都有一个客户端,而且还有一个“更高级别”的 API。 这两个项目合并了,现在我们有了新的 Selenium 或 **Selenium 2**
在 2007 年前后,ThoughtWorks 的另一个名叫 Simon Stewart 的人正在开发另一个名为 **WebDriver** 的 Web 测试工具,该工具不依赖 JavaScript。 与 Selenium RC 相比,它不仅为每个浏览器都有一个客户端,而且还有一个“更高级别”的 API。 这两个项目合并了,现在我们有了新的 Selenium 或 **Selenium 2**
啊哈,所以结论是:
* 硒 RC =硒 1
* Selenium 与 WebDriver 合并= Selenium 2
* Selenium RC = Selenium 1
* Selenium 与 WebDriver 合并 = Selenium 2
希望您喜欢这次旅行。 在另一篇文章中再见。 祝你有美好的一天!
# 4.工具套件
# 4.Selenium 工具套件
> 原文: [https://javabeginnerstutorial.com/selenium/4-selenium-tool-suite/](https://javabeginnerstutorial.com/selenium/4-selenium-tool-suite/)
朋友! 需要另外 ***BrainBell*** ***图片的时间!** 我们通过可视化学习的内容越多,我们在以后的时间记得和回忆的就越好。*
谁不喜欢图片,众所周知,一张图片值一千字。 因此,此博客文章将全部为图片! 我以视觉方式提出了**成分的高级概念。 因为图像使学习变得更加有趣和充满乐趣。**
谁不喜欢图片,众所周知,一张图片值一千字。 因此,此博客文章将全部为图片! 我以视觉方式提出了 Selenium **成分的高级概念。 因为图像使学习变得更加有趣和充满乐趣。**
## 乍看上去:
![Tool Suite](img/8e286186b65b419bbdc1fe0cdff8be9e.png)
## 工具套件:
## Selenium 工具套件:
![Selenium Tool Suite](img/34d16ae3d7b6d041d142c13fd26c34f2.png)
......@@ -18,11 +18,11 @@
![Selenium IDE](img/0c6448622aca188620682d4dc8601a17.png)
## RC:
## Selenium RC:
![Selenium RC](img/c90e69316462ea684972dd173f0768e2.png)
## 网格:
## Selenium 网格:
![Selenium Grid](img/6ad56196c67b0aa1e4fef1ee097947b5.png)
......
......@@ -6,12 +6,12 @@
***浏览器***
| ***Selenium IDE*** | *** RC*** | ***WebDriver*** |
| ***Selenium IDE*** | ***Selenium RC*** | ***WebDriver*** |
| 火狐浏览器 | Internet Explorer,Google Chrome,Mozilla Firefox,Safari,Opera,其他浏览器的部分支持 | Internet Explorer,Google Chrome,Mozilla Firefox,Safari,Opera,HtmlUnit,Phantomjs,Android,iOS |
***操作系统***
| ***Selenium IDE*** | *** RC*** | ***WebDriver*** |
| ***Selenium IDE*** | ***Selenium RC*** | ***WebDriver*** |
| Windows,Mac OS,Linux,Solaris | Windows,Mac OS,Linux,Solaris | Windows,Mac OS,Linux,Solaris |
***编程语言***
......@@ -21,7 +21,7 @@
***测试框架***
| ***Selenium IDE*** | *** RC*** | ***WebDriver*** |
| ***Selenium IDE*** | ***Selenium RC*** | ***WebDriver*** |
| 可以生成代码 | RSpec(Ruby),Test :: Unit(Ruby),unittest(Python 2),JUnit 3(Java),JUnit 4(Java),TestNG(Java),NUnit(C#) | RSpec(Ruby),Test :: Unit(Ruby),unittest(Python 2),JUnit 4(Java),TestNG(Java),NUnit(C#) |
巨大的支持权!
......
# 6.工具:争霸
# 6.Selenium 工具:争霸
> 原文: [https://javabeginnerstutorial.com/selenium/6-selenium-tools-fight-supremacy/](https://javabeginnerstutorial.com/selenium/6-selenium-tools-fight-supremacy/)
就像我们在众多产品中争夺霸主地位的测试人员一样,Selenium Tools 也进行了非常相似的战斗,以证明自己是最好的! 让我们看看它们之间到底发生了什么……
**Selenium IDE***专为初学者而设的历史领袖*
**Selenium IDE***专为 Selenium 初学者而设的历史领袖*
* Selenium IDE 是整个可用套件中最简单的**框架**,并且拥有这样做的所有权利。 它也是**最容易学习的**
* **不需要编程经验**(不过,对 HTML 的了解很少!)
......@@ -14,7 +14,7 @@
* 为扩展提供良好的支持。
* 帮助导出可以在 Selenium RC 和 WebDriver 中执行的测试。
** RC***系列*的超人
**Selenium RC***系列*的超人
* 跨浏览器和跨平台测试随着其引入而成为现实。
* 支持 C#,Java,Ruby,Python,Perl 和 PHP 等语言,因此需要编程经验。
......@@ -31,7 +31,7 @@
* 还支持不可见的浏览器 HtmlUnit。
* 还支持对 iPhone 和 Android 应用的测试。
**网格***I-Am-You-For-You 冠军*
**Selenium 网格***I-Am-You-For-You 冠军*
现在它已内置在服务器本身中,因此可以称为“ **Selenium Server Grid Mode”** 。 当您必须一次运行多个测试而感到担心时,Selenium Grid 会为您提供帮助,说我在这里为您服务!
......@@ -42,7 +42,7 @@
所有这些都可以使沉闷的测试日变成充满机遇和阳光的一天。
是否不是您要在办公时间开始后每天早上至少服用一次“”药? 根据被测应用,客户要求和可用时间表,可以选择上述工具之一进行自动化。
是否不是您要在办公时间开始后每天早上至少服用一次“Selenium”药? 根据被测应用,客户要求和可用时间表,可以选择上述工具之一进行自动化。
游戏开始!
......@@ -2,12 +2,12 @@
> 原文: [https://javabeginnerstutorial.com/selenium/7a-ide-benefits-limitations/](https://javabeginnerstutorial.com/selenium/7a-ide-benefits-limitations/)
硒将我们带到了新的地方,现在是时候让我们进一步了解我们将生活的世界 – **硒世界**。 它有四个主要部分,即
Selenium 将我们带到了新的地方,现在是时候让我们进一步了解我们将生活的世界 – **Selenium 世界**。 它有四个主要部分,即
* Selenium IDE 的 **Magic Meadows** 通常被称为“ *Selenium 初学者的历史领袖*
* RC 的**多样性增量**以“ *系列超人”* 而闻名
* Selenium RC 的**多样性增量**以“ *系列超人”* 而闻名
* WebDriver 的 **Southern Surprises** ,即“ *统治冠军”*
* 网格的**群集通道**,这就是我们的“ *I-Am-There-For-You Champ”*
* Selenium 网格的**群集通道**,这就是我们的“ *I-Am-There-For-You Champ”*
出发去魔术草地! 让我们永远离开这个尘土飞扬的旧手动测试世界。 哦,不用担心,我们随时可以发送蜗牛邮件。
......
......@@ -2,7 +2,7 @@
> 原文: [https://javabeginnerstutorial.com/selenium/7b-selenium-ide-firebug-installation/](https://javabeginnerstutorial.com/selenium/7b-selenium-ide-firebug-installation/)
欢迎来到我们的第一篇*探索*(就像唱歌一样!)帖子。 为了从我们的系列中获得最大收益,建议您密切注意并共同努力。 它是如此简单!
欢迎来到我们的第一篇*探索*(就像唱歌一样!)帖子。 为了从我们的 Selenium 系列中获得最大收益,建议您密切注意并共同努力。 它是如此简单!
*Magic Meadows* 的土地上,在我们看到真正的魔术发生之前,是时候为其设置环境了。 听起来有点技术性,不是吗? 但不用担心,这很容易,因为 Selenium IDE 是作为 Firefox 插件提供的。
......
......@@ -17,7 +17,7 @@
* “文件”菜单用于创建,打开,保存,导出,关闭测试用例和测试套件。
* 也可以查看最近使用的测试用例/测试套件文件。
* 默认情况下,测试以 HTML 格式保存。
* 这里最方便我们使用的最佳选项是“ **将测试用例导出为…**”和“ **将测试用例导出为…**”,因为它们使我们可以转换自动测试用例 将 IDE 转换为可以直接在 Selenium 远程控制或 WebDriver 中使用的格式组合(编程语言/单元测试框架/ Selenium 框架)。 我们将继续进行介绍。
* 这里最方便我们使用的最佳选项是“ **将测试用例导出为…**”和“ **将测试用例导出为…**”,因为它们使我们可以转换自动 Selenium 测试用例 将 IDE 转换为可以直接在 Selenium 远程控制或 WebDriver 中使用的格式组合(编程语言/单元测试框架/ Selenium 框架)。 我们将继续进行介绍。
下面是文件菜单的快照,其中“导出测试用例为...”选项已展开。
![File Menu](img/24895708c6a299029d9c518a1af06eba.png)
......@@ -66,7 +66,7 @@
**常规**标签中:
* ***默认超时值*** – 这表示 Selenium IDE 在产生错误之前宁愿等待测试步骤执行的时间(以毫秒为单位)。 默认值设置为 30000ms,即 30s。 可以根据 Web 元素出现或可访问的速度适当增加或减少此值。
* ***扩展*** – Selenium IDE 扩展增强了该工具的功能,可以通过从[下载所需的扩展来实现此功能 https://addons.mozilla.org/en-US/firefox /](https://addons.mozilla.org/en-US/firefox/) 链接,在页面右上角的搜索框中使用“”作为关键字。 除了作为基准 IDE 扩展的一部分定义的扩展之外,这些还将是其他扩展。
* ***扩展*** – Selenium IDE 扩展增强了该工具的功能,可以通过从[下载所需的扩展来实现此功能 https://addons.mozilla.org/en-US/firefox /](https://addons.mozilla.org/en-US/firefox/) 链接,在页面右上角的搜索框中使用“Selenium”作为关键字。 除了作为基准 IDE 扩展的一部分定义的扩展之外,这些还将是其他扩展。
* ***记住基本 URL*** – 选中此选项将确保 Selenium IDE 每次启动时都会记住该 URL 或将其加载到该工具的基本 URL 文本框中。 取消选中此选项后,IDE 将在基本 URL 栏中以空白值启动。
* ***启用实验性功能*** – 首次使用活动的互联网连接检查此字段将导入可用的格式,我们将在稍后看到。
......@@ -81,7 +81,7 @@
**定位器构建器**选项卡,
![Options_LocatorBuilders](img/970e1bb1d3fd6e74193fcd41c704bcce.png)
**定位器****的一种方式 在网页上唯一地定位或标识 Web 元素**。 例如,在记录一个测试用例时,如果我们单击一个 Web 元素,Selenium 将立即查找其“ ui”属性以存储其位置,因为列表中首先提到了该属性。 如果“ ui”不可用,它将查找“ id”,因为它在列表中排第二。 一直进行到找到所单击元素的唯一定位器为止。 因此,此列表列出了在重新编码时优先确定定位器生成顺序的方法。 只需在左窗格中进行简单拖放,即可根据需要更改顺序。
**定位器** Selenium **的一种方式 在网页上唯一地定位或标识 Web 元素**。 例如,在记录一个测试用例时,如果我们单击一个 Web 元素,Selenium 将立即查找其“ ui”属性以存储其位置,因为列表中首先提到了该属性。 如果“ ui”不可用,它将查找“ id”,因为它在列表中排第二。 一直进行到找到所单击元素的唯一定位器为止。 因此,此列表列出了在重新编码时优先确定定位器生成顺序的方法。 只需在左窗格中进行简单拖放,即可根据需要更改顺序。
其次,在“选项”菜单中有“ **格式**”:
![OptionsMenu_Format](img/f1ac189be99456f3852546d22bceee05.png)
......
......@@ -104,7 +104,7 @@ Selenium IDE 工具的左侧有一个测试用例窗格,如下所示,
***d。 汇总窗格***
这也是该工具的高级功能。 关于此方面的详细信息,可在“帮助”菜单下的同一“ UI 元素文档”选项中找到。 因此,简单地说,当将硒命令的重复序列组合在一起时,在我们的硒世界中被称为“汇总”。 可以将其作为单个操作执行,并且这些汇总可重复使用,即可以多次使用,从而缩短了脚本长度,并使脚本更有意义。
这也是该工具的高级功能。 关于此方面的详细信息,可在“帮助”菜单下的同一“ UI 元素文档”选项中找到。 因此,简单地说,当将 Selenium 命令的重复序列组合在一起时,在我们的 Selenium 世界中被称为“汇总”。 可以将其作为单个操作执行,并且这些汇总可重复使用,即可以多次使用,从而缩短了脚本长度,并使脚本更有意义。
话虽如此,我们几乎涵盖了 Selenium IDE 工具的所有功能,术语和部分。 掌握它,您就可以开始自动执行手动测试。
......
......@@ -31,7 +31,7 @@ ew! 记住整个命令列表以及它们的语法,必需的参数及其描
目标将是可以识别的搜索框,其“ Id”和
值将为“
值将为“Selenium
我们刚才讨论的内容不清楚吗? 绝对不用担心! 因为当我们记录并运行我们的第一个 Selenium IDE 测试脚本时,将获得清晰的画面。 最好的是,这就是我们下一篇文章的全部内容!
......
......@@ -6,7 +6,7 @@
![Test Script](img/5e6a31e752f4393906936f5e686f5d93.png)
大字警报! **Selenese** – 就是一组命令。 这些命令的序列构成一个*测试脚本。* 每行是一个 Selenium 命令,具有三个部分,即 Command,Target 和 Value。
大字警报! **Selenese** – 就是一组 Selenium 命令。 这些命令的序列构成一个*测试脚本。* 每行是一个 Selenium 命令,具有三个部分,即 Command,Target 和 Value。
*命令*-做什么/需要执行什么动作
......
......@@ -2,7 +2,7 @@
> 原文: [https://javabeginnerstutorial.com/selenium/7j-ide-debugging/](https://javabeginnerstutorial.com/selenium/7j-ide-debugging/)
Hiya 测试人员! 欢迎回到我们针对硒初学者的全职领导者的另一篇探索文章,即“硒 IDE” !! 现在是时候密切注意进行调试了。
Hiya 测试人员! 欢迎回到我们针对 Selenium 初学者的全职领导者的另一篇探索文章,即“Selenium IDE” !! 现在是时候密切注意进行调试了。
我们的目标雄心勃勃,但我们将一次迈出一步。
......
......@@ -132,7 +132,7 @@ XPath 是一种语法,用于在 XML 文档中导航和定位节点。 由于 H
如果找不到合适的 Id,名称或类等来查找元素,则可以使用 XPath。 使用 XPath 定位元素有两种。 一个是绝对路径(不建议使用),因为它会在对现有 HTML 代码进行最小改动的情况下中断。 另一个选项是相对路径 – 使用 ID 或名称查找附近的元素,并使用两者之间的关系使用 XPath 查找所需的元素。 因此,几乎可以使用 XPath 策略定位网页上的任何元素。
这种定位策略非常复杂,通常是高级用户首选的定位策略。 但是不用担心! 为了使整个 XPath 查找方法变得容易,我们将“ Firebug”作为 Firefox 浏览器的附加组件。 很快您就会遇到一篇博客文章,该文章完全致力于 Firebug 的安装和使用! 欢呼!!
这种定位策略非常复杂,通常是高级 Selenium 用户首选的定位策略。 但是不用担心! 为了使整个 XPath 查找方法变得容易,我们将“ Firebug”作为 Firefox 浏览器的附加组件。 很快您就会遇到一篇博客文章,该文章完全致力于 Firebug 的安装和使用! 欢呼!!
另外,由于仅 XPath 定位符以“ //”开头,因此不需要为 XPath 定位符指定“ xpath =”。
......
......@@ -43,7 +43,7 @@
Selenium 涉及的一项主要活动是使用不同的定位器来识别 Web 元素。 Selenium IDE 会自动为您执行此操作。 但是在某些情况下,您可能想插入新的命令(以及通过记录活动获得的自动生成的代码)来进行断言,验证等。在这种情况下,请不要使用检查元素功能来定位 Web 元素 然后努力使用正确的命令语法,我们有了一个捷径。 ***右键单击!*** 你没听错。
右键单击您要在其上执行操作的网页元素(显然是在 Firefox 浏览器中!),将自动打开一个菜单,提示与所选元素配合使用的大多数可能的命令。 要获取整个列表,只需单击“显示可用命令”选项。
右键单击您要在其上执行操作的网页元素(显然是在 Firefox 浏览器中!),将自动打开一个菜单,提示与所选元素配合使用的大多数可能的 Selenium 命令。 要获取整个列表,只需单击“显示可用命令”选项。
这里唯一的问题是:应该打开 Selenium IDE。 不需要打开“记录”模式。 只需打开 IDE 窗口就足够了。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册