其他分享
首页 > 其他分享> > UI自动化测试之Select类

UI自动化测试之Select类

作者:互联网

一、Select类

1、源码分析

在UI自动化测试中,如果遇到下拉框的选择,就可以使用Select类里面的方法来具体进行定位和解决。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <center>
        喜欢的编程语言:
        <select id="kw">
            <option  value="" selected>请选择您喜欢的编程语言</option>
            <option value="Python">Python语言</option>
            <option value="Go">Go语言</option>
            <option value="Java">Java语言</option>
        </select>
    </center>
</body>
</html>

如上是HTML的源代码,下面具体的交互信息

 

 

在这个下拉框的交互中,我们需要获取到下拉框的选项,来定位下拉框的内容,这是我们在工作里面的具体交互,在WebDriver的测试框架中,就可以使用Select类来处理下拉框的交互,在使用它之前,首先来看这个类的构造方法,因为构造方法会告诉我们如何初始化这个类,具体源码的信息如下:

class Select(object):

    def __init__(self, webelement):
        """
        Constructor. A check is made that the given element is, indeed, a SELECT tag. If it is not,
        then an UnexpectedTagNameException is thrown.

        :Args:
         - webelement - element SELECT element to wrap

        Example:
            from selenium.webdriver.support.ui import Select \n
            Select(driver.find_element(By.TAG_NAME, "select")).select_by_index(2)
        """
        if webelement.tag_name.lower() != "select":
            raise UnexpectedTagNameException(
                "Select only works on <select> elements, not on <%s>" %
                webelement.tag_name)
        self._el = webelement
        multi = self._el.get_attribute("multiple")
        self.is_multiple = multi and multi != "false"

在如上的源码中,可以得到该类初始化的时候,需要获取元素属性的对象,从这些信息可以总结的得出针对下拉框的这部分,元素定位的方式步骤具体为:

在Select的类里面,针对获取下拉框选项里面的内容,使用到的方法主要是索引方式,和文本信息以及text的方式。

2、下拉框定位实战

         针对如上的内容,通过三种的方式来定位下拉框的内容,具体涉及到的方法以及案例实战的代码具体为:

1.2、select_by_index()

             select_by_index()的方法是通过索引的方式,如我们在上面的交互中,我们想选择下拉框中的Go语言,它是在第三位,那么它的索引就是2,因为索引是从0开始,下面的代码案例主要是以索引的方式来进行定位的,具体代码如下:

from selenium import  webdriver
from selenium.webdriver.support.select import Select
import  time as t

driver=webdriver.Chrome()
driver.maximize_window()
#该地址为存储.html打开后的路径
driver.get('file:///C:/Users/29660/PycharmProjects/pythonProject/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/xialakuang.html')
#定位到下拉框的元素属性
nr=driver.find_element_by_id('kw')
select=Select(webelement=kw)
select.select_by_index(2)
t.sleep(3)
driver.quit()

1.2、select_by_value()

            select_by_value()方法是通过value的方式来进行定位,也就是标签中option里面的value属性来进行定位,比如还是Go语言,那么它的value的值就是“Go”,具体见如下的代码:

from selenium import  webdriver
from selenium.webdriver.support.select import Select
import  time as t

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/29660/PycharmProjects/pythonProject/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/xialakuang.html')
#定位到下拉框的元素属性
nr=driver.find_element_by_id('kw')
select=Select(webelement=kw)
select.select_by_value("Go")
t.sleep(3)
driver.quit()

1.3、select_by_text()

             select_by_text()的方法是通过文本信息来定位的,比如下拉框还是想选择Go,那么它的文本信息其实就是“Go语言”,具体代码如下:

from selenium import  webdriver
from selenium.webdriver.support.select import Select
import  time as t

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/29660/PycharmProjects/pythonProject/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/xialakuang.html')
#定位到下拉框的元素属性
nr=driver.find_element_by_id('kw')
select=Select(webelement=kw)
t.sleep(3)
print(select.first_selected_option)
t.sleep(3)
driver.quit()

3、其他案例

           在实际的工作中,前端程序员总是不遵守规则的,实现的下拉框的选项并不是很标准的select,那么这个时候到底如何解决?,比如看下面的拉勾网的下拉框的选项:

在工作性质里面选择对应的下拉框,我们看这部分的HTML的源码,具体如下:

  <span class="title">工作性质:</span>
                                                                                                                                                                    <div class="selectUI-text value text"><span>不限</span><i></i>
    <ul>       <li><a rel="nofollow" href="https://www.lagou.com/jobs/list_%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88?px=default&city=全国#order" data-lg-tj-id="8z00" data-lg-tj-no="0001" data-lg-tj-cid="idnull">不限</a></li> <li><a rel="nofollow" href="https://www.lagou.com/jobs/list_%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88?px=default&gx=全职&city=全国#order" data-lg-tj-id="8z00" data-lg-tj-no="0002 " data-lg-tj-cid="idnull">全职</a></li> <li><a rel="nofollow" href="https://www.lagou.com/jobs/list_%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88?px=default&gx=兼职&city=全国#order" data-lg-tj-id="8z00" data-lg-tj-no="0003 " data-lg-tj-cid="idnull">兼职</a></li> <li><a rel="nofollow" href="https://www.lagou.com/jobs/list_%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88?px=default&gx=实习&city=全国&isSchoolJob=1#order" data-lg-tj-id="8z00" data-lg-tj-no=" 0004 " data-lg-tj-cid="idnull">实习</a></li> </ul> </div>

那么针对这种下拉框的选择,到底应该如何来进行定位和操作了,其实也是很简单的,它的步骤为:

下面使用具体的代码来演示下这部分的案例实战应用,涉及到的代码为:

from selenium import  webdriver
from selenium.webdriver.support.select import Select
import  time as t

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.lagou.com/')
t.sleep(3)
driver.find_element_by_id('search_input').send_keys('测试开发工程师')
driver.find_element_by_id('search_button').click()
t.sleep(5)
#定位到工作性质然后点击
driver.find_element_by_xpath('//*[@id="order"]/li/div[3]/div').click()
t.sleep(3)
#选择下拉框中的全职
driver.find_element_by_xpath('//*[@id="order"]/li/div[3]/div/ul/li[2]/a').click()
t.sleep(3)
driver.quit()

不要固守成规,打破局部思维,不能说下拉框一定就得使用Select类里面的方法来定位,因为很多东西是动态的,我们不能因为程序员变化就抱怨对方,而说这部分由于你不规范,所以这部分自动化测试我无法实现,当然这样是不对的。

 

标签:webdriver,driver,UI,Select,自动化,import,下拉框,select
来源: https://www.cnblogs.com/wrwangrong/p/16434528.html