def open_url(host, browser): dc = {"browserName": browser} driver = Remote(command_executor=host, desired_capabilities=dc) driver.get("https://www.baidu.com/") driver.find_element(By.CSS_SELECTOR, ".s_ipt").send_keys("selenium") driver.find_element(By.CSS_SELECTOR, "span>input#su").click() driver.close()
class Case(TestCase): def setUp(self): self.browser = config.get("executor.browser.name", "CHROME") self.server_url = config["executor.scheme"] + "://" + config[ "executor.server"] + "/wd/hub" log_d("Try connect " + self.server_url) self.driver = Remote(command_executor=config["executor.scheme"] + "://" + config["executor.server"] + "/wd/hub", desired_capabilities=getattr( DesiredCapabilities, self.browser).copy()) # self.driver = webdriver.Chrome() # self.driver = webdriver.Firefox() self.driver.implicitly_wait(config["timeout"]) self.loginModel = LoginPage(self.driver, os.environ.get('LOGIN'), os.environ.get('PASSWORD')) self.loginModel.open() self.loginModel.auth() self.pages = [] def tearDown(self): self.loginModel.close() for page in self.pages: page.close() self.driver.close() def addPage(self, page): self.pages.append(page)
def test_baidu(host, browser): print('当前浏览器是%s,启动时间是%s' % (browser, time.ctime())) dc = {'browserName': browser} driver = Remote(command_executor=host, desired_capabilities=dc) driver.get('https://www.baidu.com/') driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click() time.sleep(3) driver.close() print('%s结束时间是%s' % (browser, time.ctime()))
class BugFree管理员登录退出(unittest.TestCase): """ 演示的是Bugfree的登录和退出 数据驱动,相同逻辑使用不同的数据去运行 """ def setUp(self): # self.driver = webdriver.Chrome() # self.driver.implicitly_wait(30) # self.base_url = "http://192.168.2.87" command_executor = 'http://192.168.2.35:8012/wd/hub' desired_capabilities = { 'platform': 'ANY', 'browserName': 'chrome', 'version': '', 'javascriptEnabled': True } self.driver = Remote(command_executor, desired_capabilities) self.driver.implicitly_wait(30) self.base_url = "http://192.168.2.87" driver = self.driver logging.info("打开浏览器成功") def tearDown(self): self.driver.close() pass @ddt.unpack @ddt.data(*test_data) def test_admin_login_test(self, admin, password, flag): """admin的登录的所有测试用例""" logging.info("test_admin_login_test start......") driver = self.driver driver.get(self.base_url + "/bugfree/index.php/site/login") driver.find_element_by_id("LoginForm_username").clear() driver.find_element_by_id("LoginForm_username").send_keys(admin) driver.find_element_by_id("LoginForm_password").clear() driver.find_element_by_id("LoginForm_password").send_keys(password) driver.find_element_by_id("LoginForm_rememberMe").click() driver.find_element_by_id("SubmitLoginBTN").click() # handles = driver.window_handles # driver.switch_to.window(handles[1]) time.sleep(3) self.assertIn(flag, driver.page_source) logging.info("test data is : {0},{1},{2}".format( admin, password, flag)) capture_screen(driver) # pic_path = capture_screen(driver) # if pic_path is None: # logging.error("截图不成功") # else: # logging.info(pic_path) logging.info("test_admin_login_test end......")
class TestSeleniumInDockerAndFirefox(unittest.TestCase): def setUp(self): self.browser = Remote( desired_capabilities=DesiredCapabilities.FIREFOX, command_executor="http://selenium-hub:4444/wd/hub" ) def tearDown(self): self.browser.close() def test_sample(self): self.browser.get('http://sauceclient.readthedocs.io') self.assertIn('Selenium', self.browser.page_source)
def driver(): """ Selenium driver fixture """ # Start a selenium server running chrome capabilities = DesiredCapabilities.CHROME.copy() capabilities['chromeOptions'] = { 'binary': os.getenv('CHROME_BIN', '/usr/bin/google-chrome-stable'), 'args': ['--no-sandbox'], } driver = Remote( os.getenv('SELENIUM_URL', 'http://chrome:5555/wd/hub'), capabilities, ) driver.implicitly_wait(10) yield driver driver.close()
def main(): ''' Prior to execution, run the following on CLI: $ keyring.exe set system email Password for 'email' in 'system': ***************** $ keyring.exe set system LinkedIn Password for 'email' in 'system': ***************** The CLI will not show asterisks for password. ''' email = keyring.get_password("system", "email") passwd = keyring.get_password("system", "linkedin") localappdata = os.environ.get('LOCALAPPDATA') webdriver_service = service.Service( os.path.join(localappdata, 'operadriver_win64\\operadriver.exe')) webdriver_service.start() browser = Remote( webdriver_service.service_url, DesiredCapabilities.OPERA) browser.get("https://linkedin.com/uas/login") email_element = browser.find_element_by_id("username") email_element.send_keys(email) pass_element = browser.find_element_by_id("password") pass_element.send_keys(passwd) pass_element.submit() time.sleep(5) try: mfa_element = browser.find_element_by_id( "input__phone_verification_pin") mfa_element.send_keys(input("What is the LinkedIn verification code?")) mfa_element.submit() except exceptions.NoSuchElementException: pass os.system('cls') print("[+] Logged in") job_bot(browser) browser.close()
def deinitialize_selenium(driver: webdriver.Remote): driver.close()
from selenium.webdriver import Remote import time #定义主机与浏览器 lists = { 'http://127.0.0.1:4444/wd/hub': 'internet explorer', 'http://127.0.0.1:5555/wd/hub': 'chrome', 'http://127.0.0.1:5556/wd/hub': 'firefox' } #通过不同的浏览器执行脚本 for host, browser in lists.items(): print(host, browser) driver = Remote(command_executor=host, desired_capabilities={ 'platform': 'ANY', 'browserName': browser, 'version': '', 'javascriptEnabled': True }) driver.get("https://www.baidu.com") time.sleep(2) driver.find_element_by_id('kw').send_keys(browser) time.sleep(2) driver.find_element_by_id('su').click() time.sleep(2) driver.close()
class BasePage(object): def __init__(self, project_name): self.driver = '' self.loc = '' self.project_name = project_name yamlPath = "user.yaml" yaml.load(yamlPath, Loader=yaml.BaseLoader) yaml.warnings({'YAMLLoadWarning': False}) f = open(yamlPath, 'r') temp = yaml.load(f.read()) self.url = temp[project_name]['url'] self.username = temp[project_name]['username'] self.password = temp[project_name]['password'] def open(self, browser="chrome", host='http://localhost:8081/wd/hub' ): # 初始化 打开浏览器 并最大化 self 与java中的this中一样,调用时不用传入self参数 try: self.driver = Remote(command_executor=host, desired_capabilities={ 'platform': 'ANY', 'browserName': browser, 'version': '', 'javascriptEnabled': True }) self.driver.maximize_window() except Exception as e: print(e) logger_cls.info(u"打开{0}浏览器".format(browser)) logger_cls.info(u"最大化") def get(self): try: self.driver.get(self.url) self.driver.implicitly_wait(10) # 隐性等待,最长等10秒 logger_cls.info(u'打开:{0}'.format(self.url)) except BaseException: logger_cls.error(u'打开{0}失败'.format(self.url)) self.loc = loc.Analyze(self.project_name) #初始化,读取xml 赋值给loc def find(self, name): #元素定位,并返回定位好的元素 try: el = WebDriverWait(self.driver, 3, 0.5).until( #设置显示等待时间,每0.5秒检查一次,如果超出指定值就报错 EC.presence_of_element_located( (self.loc[name].type, self.loc[name].UIIdentifier))) logger_cls.info(u'定位元素:{0}'.format(name)) # logger_cls.info(loc[name].value) except BaseException: logger_cls.error(u'定位元素:{0}失败'.format(name)) return el def send_keys(self, name, text): try: self.find(name).send_keys(text) logger_cls.info(u'在:{0}输入{1}'.format(name, text)) time.sleep(3) except BaseException: logger_cls.error(u'在:{0}输入{1}失败'.format(name, text)) def click(self, name): try: self.find(name).click() logger_cls.info(u'点击:{0}'.format(name)) time.sleep(3) except BaseException: logger_cls.error(u'点击:{0}失败'.format(name)) def being(self, name): t = False try: self.driver.find_element_by_xpath(self.loc[name].UIIdentifier) t = True logger_cls.info(u'{0}元素存在'.format(name)) except BaseException: logger_cls.info(u'{0}元素不存在'.format(name)) return t def login(self): self.get() self.send_keys(u'用户名', self.username) self.send_keys(u'密码', self.password) self.click(u'登录') time.sleep(3) if self.being(u'不再提示'): self.click(u'不再提示') # self.get_version() def clearmonitor(self): names = [u'博主', u'博主圈'] self.click(u'事件') if self.being(u'是否有事件'): self.focus(u'找回') self.click(u'多选') self.click(u'全选') self.click(u'删除') for name in names: self.click(name) if self.being(u'是否有博主'): self.focus(u'找回') self.click(u'多选') self.click(u'全选') self.click(u'删除') def randomclick(self, name, div=None): text = '' i = len(self.driver.find_elements_by_xpath( self.loc[name].UIIdentifier)) logger_cls.info(u'{0}列表中有{1}个参数'.format(name, i)) y = random.randint(1, i) if div == None: path = self.loc[name].UIIdentifier + '[' + str(y) + ']' text = self.driver.find_element_by_xpath(path).text self.driver.find_element_by_xpath(path).click() logger_cls.info(u'随机选择列表中的{0}第个参数并点击'.format(y)) else: i2 = len( self.driver.find_elements_by_xpath( self.loc[name].UIIdentifier + '[' + str(y) + ']')) y2 = random.randint(1, i2) path = self.loc[name].UIIdentifier + '[' + str(y2) + ']' + div text = self.driver.find_element_by_xpath(path).text self.driver.find_element_by_xpath(path).click() logger_cls.info(u'随机选择列表中的{0}第个参数并点击'.format(y2)) logger_cls.info(u'{0}:文本的值为:{1}'.format(name, text)) time.sleep(3) return text def close(self): logger_cls.info(u'3秒后关闭当前页面') time.sleep(3) self.driver.close() def quit(self): logger_cls.info(u'3秒后关闭浏览器') time.sleep(3) self.driver.quit() def get_url(self): url = self.driver.current_url logger_cls.info(u'当前页面url:' + url) return url def get_text(self, name): text = self.find(name).text logger_cls.info(u'{0}文本框的值为:{1}'.format(name, text)) return text def back(self): self.driver.back() logger_cls.info(u'返回上一页面') def clear(self, name): self.find(name).clear() logger_cls.info(u'清空文本框:{0}'.format(name)) def get_name(self): name = self.driver.name logger_cls.info(u'浏览器名称:{0}'.format(name)) def get_driver(self): return self.driver def get_version(self): version = self.driver.capabilities['version'] logger_cls.info(u'浏览器版本:{0}'.format(version)) return version def switch_to(self): self.driver.switch_to.window(self.driver.window_handles[-1]) logger_cls.info(u'切换页面') def focus(self, name): ele = self.find(name) ActionChains(self.driver).move_to_element(ele).perform() logger_cls.info(u'鼠标悬停到元素:{0}'.format(name)) def refresh(self): self.driver.refresh() logger_cls.info(u'刷新页面') def title(self): title = self.driver.title logger_cls.info(u'当前页面标题' + title) return title def Slide(self, height): js = "var q=document.documentElement.scrollTop={0}".format(str(height)) self.driver.execute_script(js) logger_cls.info(u'上下滑动' + str(height)) def sleep(self, i): logger_cls.info(u'暂停{0}秒'.format(i)) time.sleep(int(i)) def Screenshot(self, name): # name='screenshot_' isExists = os.path.exists("../images\\") # 判断结果 if not isExists: # 如果不存在则创建目录 # 创建目录操作函数 os.makedirs("../images\\") print u'创建images目录' timestrmap = time.strftime('%Y%m%d_%H%M%S') imgPath = os.path.join('../images\\', str(timestrmap) + name + '.png') self.driver.save_screenshot(imgPath) logger_cls.info(u'截图:{0}{1}.png'.format(str(timestrmap), name))