发表于: 2019-12-08 21:55:46

1 627


一、今天完成的事情:

1.用seleniumGrid通过一个主机控制并行的执行测试用例,看多台机器上不同浏览器不同操作系统测试环境中的测试运行。


执行下段代码,先打开火狐浏览器,访问百度并搜索“selenium Grid”成功,再打开谷歌浏览器,访问百度并搜索“selenium Grid”成功。

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
import unittest
import HTMLTestRunner


class SeleniumGridNodesBaiduTest(unittest.TestCase):
    def setUp(self): 
        self.driver=webdriver.Firefox()
        self.driver.quit()

    def test_baidu(self):
        nodes={'http://192.168.0.105:6666/wd/hub':DesiredCapabilities.FIREFOX,
                'http://192.168.0.105:7777/wd/hub':DesiredCapabilities.CHROME}
        for host,browser in nodes.items():
            self.driver=webdriver.Remote(
                command_executor=host,
                desired_capabilities=browser)
            self.driver.get("https://www.baidu.com")
            self.driver.find_element_by_id("kw").send_keys("selenium Grid")
            self.driver.find_element_by_id("su").click()
            time.sleep(3)
            self.driver.quit()

    def tearDown(self):
        pass

if __name__ == "__main__":
    suite=unittest.TestSuite()
    suite.addTest(SeleniumGridNodesBaiduTest('test_baidu'))
    file_path="C:\\Users\\Administrator\\Desktop\\result1.html"
    file_result=open(file_path,'wb')
    runner=HTMLTestRunner.HTMLTestRunner(stream=file_result,title=u"百度搜索测试报告",description=u"用例执行情况")
    runner.run(suite)

结果如下

2.最后把不同浏览器上的测试执行步骤和结果写出,整理并提交



3.验收标准:写出一个自动化测试登录注册测试用例(python或Java语言)


执行下段代码

1)访问百度-->点击登录-->在登录弹出框切换到用户名登录-->输入内容成功

2)访问百度-->点击登录-->在登录弹出框点击立即注册弹出注册页面-->在新页面输入内容成功

from selenium import webdriver
import unittest
import time
import HTMLTestRunner


class BaiduLoginRegisterTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()

    # @unittest.skip("暂时不执行")
    def test_login(self):
        driver = self.driver
        driver.get("https://www.baidu.com")
        # 点击登录
        driver.find_element_by_link_text("登录").click()
        time.sleep(3)
        # 点击用户名登录
        driver.find_element_by_class_name(
            "tang-pass-footerBar").find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()
        # 输入用户名
        driver.find_element_by_xpath(
            '//*[@id="TANGRAM__PSP_10__userName"]').send_keys('XXXXX@qq.com')
        # 输入密码
        driver.find_element_by_xpath(
            '//*[@id="TANGRAM__PSP_10__password"]').send_keys('XXXXX')
        # 点击登录按钮,卡在图片验证,没法进入登录页面
        driver.find_element_by_xpath(
            '//*[@id="TANGRAM__PSP_10__submit"]').click()
        time.sleep(2)
        self.driver.quit()

    def test_register(self):
        driver = self.driver
        driver.get("https://www.baidu.com")
        # 点击登录
        driver.find_element_by_link_text("登录").click()
        time.sleep(2)
        # 点击立即注册
        driver.find_element_by_link_text('立即注册').click()
        time.sleep(2)
        # 进入注册页面后
        windows = driver.window_handles
        driver.switch_to.window(windows[1])
        driver.find_element_by_id("TANGRAM__PSP_4__userName").send_keys("你好")
        driver.find_element_by_id(
            "TANGRAM__PSP_4__phone").send_keys("12345678901")
        driver.find_element_by_id(
            "TANGRAM__PSP_4__password").send_keys("213123131sad")
        driver.find_element_by_id(
            "TANGRAM__PSP_4__verifyCode").send_keys("312322")
        # 点击勾选单选框
        driver.find_element_by_id("TANGRAM__PSP_4__isAgree").click()
        time.sleep(3)
        driver.quit()

    def tearDown(self):
        self.driver.quit()


if __name__ == "__main__":
    suite = unittest.TestSuite()
    suite.addTest(BaiduLoginRegisterTest("test_login"))
    suite.addTest(BaiduLoginRegisterTest("test_register"))
    file_path = "C:\\Users\\Administrator\\Desktop\\result_2.html"
    file_result = open(file_path, 'wb')
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=file_result, title=u"百度登录注册测试用例"description=u"用例执行情况")
    runner.run(suite)

结果如下


二、明天计划的事情:

1.开始任务10


三、遇到的问题:

1.如何用webdriver操作弹出窗口?--https://www.cnblogs.com/yaoze2018/p/10391491.html

弹窗类型有两种

页面弹出框(可定位元素能操作)--div

windows弹出框(不能直接定位)--alert,confirm,prompt

1)页面弹出框

div弹窗不需要切换iframe,元素需要二次定位,python写法为:

driver.find_element_by_class_name('tang-pass-footerBar').find_element_by_id('TANGRAM_PSP_10_footerULoginBtn').click()

2)windows弹出框

selenium提供switch_to.alert()方法:捕获弹出对话框(可以定位alert、confirm、prompt对话框)

switch_to.alert--定位弹出对话框

text()--获取对话框文本值

accept()--相当于点击确认

dismiss()--相当于点击取消

send_keys()--输入值(alert和confirm没有输入对话框,所以就不能用了,只能用在prompt里)


2.Selenium Webdriver如何定位到新页面--https://jingyan.baidu.com/article/6c67b1d6b849822787bb1e00.html

1)添加如下第一行代码,可以获得当前两个网页句柄,原网页句柄为0,新网页句柄为1。第二行代码将网页置为句柄为1的新网页

windows=driver.windows.handles

driver.switch_to.window(windows[1])

2)而如果时打开多个网页。首先打开网页1,再点击网页一个链接,在新窗口打开网页2,同理点击新网页2上一个链接,新窗口打开网页3等等,这是按照打开顺序为网页编号。实际网页对应的句柄如下图所示,即第一个打开的网页一直句柄是0,而最新打开的网页记为句柄1,依次序编号。


3.深度思考:测试脚本不稳定,明明调试通过的,执行到一半的时候又失败怎么优化?--失败的地方加time.sleep(XXX)


4.深度思考:测试用例在执行点击元素时失败,导致整个测试用例失败,如何提高点击元素的成功率?--如果不是用的xpath,将定位方式改为xpath


5.深度思考:脚本太多,执行效率太低,如何提高测试用例执行效率?--测试用例较多时,可以通过分布式测试减少测试用例执行时间


四、收获:
1.了解通过对多个node节点循环的方式实现一个hub节点同时访问多个node节点

2.了解如何定位弹出框的元素

3.了解如何定位到新页面


返回列表 返回列表
评论

    分享到