豹子捣蛋鸡 發表於 2019-8-24 18:42:00

JavaScript在web自动化测试中的应用

<h2>前言</h2>
<p>JS的全称JavaScript,是一种运行在浏览器中的解释型脚本语言,通常用来实现web前端页面的基本功能,对于前端开发人员是不得不掌握的一门基本技能,但是对于做web自动化测试的人员来说,如果为了实施自动化测试专门研究JS的脚本语法不仅浪费时间,也偏离了我们的工作重心,所以今天就给大家总结一下,在web自动化测试中常用的一些JS脚本,只要掌握这些脚本的使用,无需再为专门学习js脚本而花费太多时间,优秀程序员的素质是什么?有现成的直接用,绝不浪费时间自己写!^_^ 开玩笑的,俗话说技多不压身,多掌握一门技能,只有好处没坏处。正文开始!</p>
<h2>窗口滚动</h2>
<p>用途:滑动web页面</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> scrollTo(x, y):
    js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
    window.scrollTo("{x}", "{y}")
    </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">.format(x=x, y=y)
    driver.execute_script(js)</span></pre>
</div>
<p>参数说明</p>
<p>x:屏幕向右移动的距离</p>
<p>y:屏幕向下移动的距离</p>
<h2>移除属性</h2>
<p>用途:以下方法可以删除元素的任何属性,主要用来移除时间控件的readonly属性</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> remove_attribute(css, attribute, index=<span style="color: rgba(0, 0, 0, 1)">0):
    js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
    var element = document.querySelectorAll("{css}")[{index}];
      element.removeAttribute("{attr}");
    </span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=css, index=index, attr=<span style="color: rgba(0, 0, 0, 1)">attribute)
    driver.execute_script(js)</span></pre>
</div>
<p>参数说明</p>
<p>css::css表达式</p>
<p>index:索引值,默认0,标识第一个元素</p>
<p>attribute:元素的某个属性,比如readonly,value,name等</p>
<h2>高亮元素</h2>
<p>用途:方便用户查看当前操作的是哪个页面元素,也方便测试人员定位问题</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> height_light(css, index=<span style="color: rgba(0, 0, 0, 1)">0):
    js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
    var element = document.querySelectorAll("{css}")[{index}];
      element.style.border="2px solid red";
    </span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=css, index=<span style="color: rgba(0, 0, 0, 1)">index)
    driver.execute_script(js)</span></pre>
</div>
<p>参数说明</p>
<p>css:css表达式</p>
<p>index:索引值,默认0,标识第一个元素</p>
<h2>点击元素</h2>
<p>用途:由于web自动化的最大问题就是稳定性比较差,有些时候使用selenium无法点击元素,因此我们可以使用JS实现元素的点击操作</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> click(css, index=<span style="color: rgba(0, 0, 0, 1)">0):
    js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">var element = document.querySelectorAll("{css}")[{index}];
               element.click();</span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=css, index=<span style="color: rgba(0, 0, 0, 1)">index)
    driver.execute_script(js)</span></pre>
</div>
<p>参数说明</p>
<p>css:css表达式</p>
<p>index:索引值,默认0,标识第一个元素</p>
<h2>清除输入框内容</h2>
<p>用途:用来清除输入框的内容</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> clear(css, index=<span style="color: rgba(0, 0, 0, 1)">0):
    js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">var element = document.querySelectorAll("{css}")[{index}];
                element.value = "";</span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=css, index=<span style="color: rgba(0, 0, 0, 1)">index)
    driver.execute_script(js)</span></pre>
</div>
<p>参数说明</p>
<p>css:css表达式</p>
<p>index:索引值,默认0,标识第一个元素</p>
<h2>输入内容</h2>
<p>用途:输入框中输入内容</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> input(self, css, value, index=<span style="color: rgba(0, 0, 0, 1)">0):
    js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">var element = document.querySelectorAll("{css}")[{index}];
                element.value = "{value}";</span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=css, index=index, value=<span style="color: rgba(0, 0, 0, 1)">value)
    driver.execute_script(js)</span></pre>
</div>
<p>参数说明</p>
<p>css:css表达式</p>
<p>value:待输入的数据</p>
<p>index:索引值,默认0,标识第一个元素</p>
<h2>说明</h2>
<p>以上所有的JS操作,还可以结合selenium中的WebElement按照以下方式实现,因为JS中查找元素的方法有限,比如xpath定位,在js中不存在</p>
<p>如滚动页面</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> scrollTo(self, element, x, y):
    js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
    arguments.scrollTo("{}", "{}")
    </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">.format(x, y)
    driver.execute_script(js, element)</span></pre>
</div>
<p>参数说明</p>
<p>element:通过selenium中的定位方法查找到的WebElement元素对象</p>
<p>arguments:代表execute_script()方法的第二个参数</p>
<h2>测试代码</h2>
<p>我们简单的写个测试脚本来测试一下以上JS脚本是否能够顺利执行</p>
<p><span style="color: rgba(0, 0, 0, 1)">js_element.py</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
------------------------------------
@Time : 2019/8/23 19:00
@Auth : linux超
@File : js_element.py
@IDE: PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ   : 28174043@qq.com
@GROUP: 878565760
------------------------------------
</span><span style="color: rgba(128, 0, 0, 1)">"""</span>


<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> CssElement(object):

    driver </span>=<span style="color: rgba(0, 0, 0, 1)"> None

    </span><span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span>(self, css, index=None, describe=<span style="color: rgba(0, 0, 0, 1)">None):
      self.css </span>=<span style="color: rgba(0, 0, 0, 1)"> css
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> index <span style="color: rgba(0, 0, 255, 1)">is</span><span style="color: rgba(0, 0, 0, 1)"> None:
            self.index </span>=<span style="color: rgba(0, 0, 0, 1)"> 0
      </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
            self.index </span>=<span style="color: rgba(0, 0, 0, 1)"> index
      self.desc </span>=<span style="color: rgba(0, 0, 0, 1)"> describe

    </span><span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__get__</span><span style="color: rgba(0, 0, 0, 1)">(self, instance, owner):
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> instance <span style="color: rgba(0, 0, 255, 1)">is</span><span style="color: rgba(0, 0, 0, 1)"> None:
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> None
      </span><span style="color: rgba(0, 0, 255, 1)">global</span><span style="color: rgba(0, 0, 0, 1)"> driver
      driver </span>=<span style="color: rgba(0, 0, 0, 1)"> instance.driver
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> self

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> clear(self):
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      清除内容
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">var elm = document.querySelectorAll("{css}")[{index}];
                  elm.style.border="2px solid red";
                  elm.value = "";</span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=self.css, index=<span style="color: rgba(0, 0, 0, 1)">self.index)
      driver.execute_script(js)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> input(self, value):
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      输入内容
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">var elm = document.querySelectorAll("{css}")[{index}];
                  elm.style.border="2px solid red";
                  elm.value = "{value}";</span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=self.css, index=self.index, value=<span style="color: rgba(0, 0, 0, 1)">value)
      driver.execute_script(js)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> click(self):
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      点击元素
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">var elm = document.querySelectorAll("{css}")[{index}];
                   elm.style.border="2px solid red";
                   elm.click();</span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=self.css, index=<span style="color: rgba(0, 0, 0, 1)">self.index)
      driver.execute_script(js)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> remove_attribute(self, attribute):
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      删除某个元素的属性,比如日期空间的readonly属性
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      var elm = document.querySelectorAll("{css}")[{index}];
            elm.removeAttribute("{attr}");
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=self.css, index=self.index, attr=<span style="color: rgba(0, 0, 0, 1)">attribute)
      driver.execute_script(js)

    @staticmethod
    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> remove_attr(element, attribute):
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      arguments.removeAttribute("{attr}");
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(attr=<span style="color: rgba(0, 0, 0, 1)">attribute)
      driver.execute_script(js, element)

    @staticmethod
    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> scrollTo(x, y):
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      window.scrollTo("{}", "{}")
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">.format(x, y)
      driver.execute_script(js)

    @staticmethod
    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> window_scroll(element, x, y):
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      arguments.scrollTo("{}", "{}")
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">.format(x, y)
      driver.execute_script(js, element)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> height_light(self):
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      var element = document.querySelectorAll("{css}")[{index}];
            element.style.border="2px solid red";
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span>.format(css=self.css, index=<span style="color: rgba(0, 0, 0, 1)">self.index)
      driver.execute_script(js)

    @staticmethod
    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> height_lig(element):
      js </span>= <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
      arguments.style.border="2px solid red";
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
      driver.execute_script(js, element)


</span><span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
    </span><span style="color: rgba(0, 0, 255, 1)">pass</span></pre>
</div>
<p>用例</p>
<p><span style="color: rgba(0, 0, 0, 1)">test_js.py</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
------------------------------------
@Time : 2019/8/22 16:51
@Auth : linux超
@File : test_js.py
@IDE: PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ   : 28174043@qq.com
@GROUP: 878565760
------------------------------------
</span><span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> time
</span><span style="color: rgba(0, 0, 255, 1)">from</span> selenium.webdriver.remote.webdriver <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> WebDriver
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> unittest
</span><span style="color: rgba(0, 0, 255, 1)">from</span> selenium <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> webdriver

</span><span style="color: rgba(0, 0, 255, 1)">from</span> javascript.js_element <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> CssElement


</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Base(object):
    window </span>=<span style="color: rgba(0, 0, 0, 1)"> CssElement

    </span><span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self, driver: WebDriver):
      self.driver </span>=<span style="color: rgba(0, 0, 0, 1)"> driver

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> load_url(self, url):
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> self.driver.get(url)


</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> BaiDuPage(Base):
    search_input </span>= CssElement(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#kw</span><span style="color: rgba(128, 0, 0, 1)">"</span>, describe=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">百度搜索框</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
    search_button </span>= CssElement(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#su</span><span style="color: rgba(128, 0, 0, 1)">"</span>, describe=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">百度按钮</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> search(self):
      self.search_input.height_light()
      self.search_input.clear()
      time.sleep(</span>2)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 为了看到效果</span>
      self.search_input.input(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">linux超</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
      time.sleep(</span>2<span style="color: rgba(0, 0, 0, 1)">)
      self.search_button.height_light()
      self.search_button.click()
      time.sleep(</span>2<span style="color: rgba(0, 0, 0, 1)">)
      self.window.scrollTo(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">0</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">500</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
      time.sleep(</span>2)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 为了看到效果</span>


<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ChinaRailway(Base):
    data_input </span>= CssElement(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#train_date</span><span style="color: rgba(128, 0, 0, 1)">"</span>, describe=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">日期控件</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> input_date(self, date):
      self.data_input.height_light()
      self.data_input.remove_attribute(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">readonly</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
      self.data_input.input(date)
      time.sleep(</span>2)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 为了看到效果</span>


<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> TestJs(unittest.TestCase):

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setUp(self):
      self.driver </span>=<span style="color: rgba(0, 0, 0, 1)"> webdriver.Firefox()
      self.driver.maximize_window()
      self.driver.implicitly_wait(</span>20<span style="color: rgba(0, 0, 0, 1)">)
      self.bai_du_page </span>=<span style="color: rgba(0, 0, 0, 1)"> BaiDuPage(self.driver)
      self.china_railway </span>=<span style="color: rgba(0, 0, 0, 1)"> ChinaRailway(self.driver)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_search(self):
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">百度搜索</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
      self.bai_du_page.load_url(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">https://www.baidu.com</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
      self.bai_du_page.search()

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_china_railway(self):
      </span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">12306日期</span><span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(0, 0, 0, 1)">
      self.china_railway.load_url(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">https://www.12306.cn/index/</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
      time.sleep(</span>5)<span style="color: rgba(0, 128, 0, 1)">#
</span>      self.china_railway.input_date(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2021-01-01</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

    </span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> tearDown(self):
      self.driver.quit()


</span><span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
    unittest.main()</span></pre>
</div>
<h2>执行效果及输出</h2>
<p><img src="https://img2018.cnblogs.com/blog/1421063/201908/1421063-20190823203441507-681298540.gif" alt="" width="1202" height="603"></p>
<h2>总结</h2>
<p>以上所有的操作仅支持CSS表达式, 当然你可以修改替换<span style="color: rgba(128, 0, 0, 1)">querySelectorAll</span>方法为getElementById, getElementByClassName等,但是需要注意使用getElementById时,不需要index参数;</p>
<p>Js相对于selenium的控制页面元素,执行速度更快,而且当遇到selenium比较难处理的操纵时,可以考虑使用js代码来实现,当然还是需要你懂点Js代码,不懂也没关系,掌握以上代码完全够你解决实际问题</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>----------------------------真正的勇士, 敢于直面惨淡的Warning、 敢于正视淋漓的Error--------------------------</p>
    <p>
      <span style="color: red">版权声明</span>
    </p>
    <p></p>
    <hr style="color: red">
    <p>
      <span style="color: red">出处:</span>
      
            博客园Linux超的技术博客--https://www.cnblogs.com/linuxchao/
      
    </p>
    <p>
      <span style="color: red">您的支持是对博主最大的鼓励,感谢您的认真阅读</span>
    </p>
    <p>
      <span style="color: red">
            本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,
            且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
      </span>
    </p>
    <p>
      <span style="color: red">作者:</span>
      <span style="color: black">Linux超</span>
    </p><br><br>
来源:https://www.cnblogs.com/linuxchao/p/linuxchao-js.html
頁: [1]
查看完整版本: JavaScript在web自动化测试中的应用