python-2.7 - 将命令行参数传递给 selenium python webdriver 测试用例

标签 python-2.7 selenium selenium-webdriver

以下代码是使用在 Saucelabs 中运行的 selenium python Web 驱动程序编写的。我在列表中提供浏览器名称、版本和平台,如何通过命令行参数提供浏览器详细信息来执行相同操作?我正在使用 py.test 来执行测试用例。

import os
import sys
import httplib
import base64
import json
import new
import unittest
import sauceclient
from selenium import webdriver
from sauceclient import SauceClient

# it's best to remove the hardcoded defaults and always get these values
# from environment variables
USERNAME = os.environ.get('SAUCE_USERNAME', "ranjanprabhub")
ACCESS_KEY = os.environ.get('SAUCE_ACCESS_KEY', "ecec4dd0-d8da-49b9-b719-17e2c43d0165")
sauce = SauceClient(USERNAME, ACCESS_KEY)

browsers = [{"platform": "Mac OS X 10.9",
             "browserName": "chrome",
             "version": ""},
           ]


def on_platforms(platforms):
    def decorator(base_class):
        module = sys.modules[base_class.__module__].__dict__
        for i, platform in enumerate(platforms):
            d = dict(base_class.__dict__)
            d['desired_capabilities'] = platform
            name = "%s_%s" % (base_class.__name__, i + 1)
            module[name] = new.classobj(name, (base_class,), d)
    return decorator


@on_platforms(browsers)
class SauceSampleTest(unittest.TestCase):
    def setUp(self):
        self.desired_capabilities['name'] = self.id()

        sauce_url = "http://%s:%<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d9aa99b6b7bdbcb4b8b7bdf7aab8acbabcb5b8bbaaf7bab6b4" rel="noreferrer noopener nofollow">[email protected]</a>:80/wd/hub"
        self.driver = webdriver.Remote(
            desired_capabilities=self.desired_capabilities,
            command_executor=sauce_url % (USERNAME, ACCESS_KEY)
        )
        self.driver.implicitly_wait(30)

    def test_sauce(self):
        self.driver.get('http://saucelabs.com/test/guinea-pig')
        assert "I am a page title - Sauce Labs" in self.driver.title
        comments = self.driver.find_element_by_id('comments')
        comments.send_keys('Hello! I am some example comments.'
                           ' I should be in the page after submitting the form')
        self.driver.find_element_by_id('submit').click()

        commented = self.driver.find_element_by_id('your_comments')
        assert ('Your comments: Hello! I am some example comments.'
                ' I should be in the page after submitting the form'
                in commented.text)
        body = self.driver.find_element_by_xpath('//body')
        assert 'I am some other page content' not in body.text
        self.driver.find_elements_by_link_text('i am a link')[0].click()
        body = self.driver.find_element_by_xpath('//body')
        assert 'I am some other page content' in body.text

    def tearDown(self):
        print("Link to your job: https://saucelabs.com/jobs/%s" % self.driver.session_id)
        try:
            if sys.exc_info() == (None, None, None):
                sauce.jobs.update_job(self.driver.session_id, passed=True)
            else:
                sauce.jobs.update_job(self.driver.session_id, passed=False)
        finally:
            self.driver.quit()

最佳答案

所以这有点复杂,因为您可以将一组浏览器传递到 @on_platforms 装饰器中。我的解决方案适用于单个浏览器,因为看起来这就是您现在正在做的事情。


对于当前的单一浏览器情况 - 您正在寻找 argparse 。这是我建议的修复:

import argparse

def setup_parser():
    parser = argparse.ArgumentParser(description='Automation Testing!')
    parser.add_argument('-p', '--platform', help='Platform for desired_caps', default='Mac OS X 10.9')    
    parser.add_argument('-b', '--browser-name', help='Browser Name for desired_caps', default='chrome')
    parser.add_argument('-v', '--version', default='')

    args = vars(parser.parse_args())

    return args

desired_caps = setup_parser()
browsers = [desired_caps]
print browsers

但是,如果您想要测试多个浏览器(我建议您这样做!),您不应该尝试对每个浏览器的desired_caps 使用命令行参数强>。您应该为浏览器加载一个 json 配置文件,并为您希望 Sauce 运行的每个浏览器加载desired_caps。

也许每组浏览器都有不同的配置文件,然后使用命令行参数传入要加载的配置文件。


关于python-2.7 - 将命令行参数传递给 selenium python webdriver 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24300943/

相关文章:

java - 如何使用 Selenium Webdriver 和 Java 提取元素的显示属性

java - 如何通过assert验证表中添加的数据 - Selenium WebDriver Java

c - 数学指数函数的Python源代码?

python - 这行 Python 代码的作用是什么?

python - 值错误 : MySQL identifier cannot be entirely numeric with Pandas to_sql

python - 删除 python 字典中的一个级别,保留值

javascript - Protractor 和 Jasmine : How can I test redirects?

Python Selenium 如何单击特定文本旁边的按钮?

java - 如何使用json格式自定义TestNG报告结果

python - Selenium with/Firefox 88 更改为 navigator.webdriver