package com.gubai.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions; public class Login {
public WebDriver driver;
public void InitDriver() {
String url = "http://www.imooc.com/";
System.setProperty("webdriver.chrome.driver", "C:\\driver\\chromedriver.exe");
driver = new ChromeDriver();
driver.get(url);
driver.manage().window().maximize();
driver.findElement(By.id("js-signin-btn")).click();
} public void loginscript() throws Exception {
this.InitDriver();
String username = "账号";
String emailElement = "email";
String userBy = "name";
String userpass = "密码";
String passBy = "name";
String passwordElement = "password";
String buttonElement = "btn-red";
String buttonBy = "className";
String headerElement = "header-avator";
String nameElement = "name";
Thread.sleep(3000);
WebElement user = driver.findElement(this.byStr(userBy, emailElement));
//driver.findElement(this.byStr(userBy, emailElement));
user.isDisplayed();
WebElement password = driver.findElement(this.byStr(passBy,passwordElement));
password.isDisplayed();
WebElement loginButton = driver.findElement(this.byStr(buttonBy,buttonElement));
loginButton.isDisplayed();
user.sendKeys(username);
password.sendKeys(userpass);
loginButton.click();
Thread.sleep(3000);
WebElement header = driver.findElement(By.id(headerElement));
header.isDisplayed();
Actions actions = new Actions(driver);
actions.moveToElement(header).perform();;
String userInfo = driver.findElement(By.className(nameElement)).getText();
System.out.println(userInfo);
if(userInfo.equals("mushishi_xu1")) {
System.out.print("登陆成功");
}else {
System.out.print("登录失败");
}
}
/**封装By by **/
public By byStr(String by, String local){
if(by.equals("id")) {
return By.id(local);
}else if(by.equals("name")){
return By.name(local);
}else if(by.equals("className")){
return By.className(local);
}else if(by.equals("xpath")){
return By.className(local);
}else{
return By.xpath(local);
}
} public static void main(String[] args) throws Exception{
Login login = new Login();
login.loginscript();
}
}

登录脚本重构by封装的更多相关文章

  1. 登录脚本重构Element

    登录脚本重构Element package com.gubai.selenium; import org.openqa.selenium.By; import org.openqa.selenium. ...

  2. 7-unittest和requests重构、封装处理get/post请求

    1.概念说明 ① unittest:python中自带的单元测试框架,封装了一些校验返回的结果方法和一些用例执行前的初始化操作 ② TestCase:测试用例 ③ TestSuite:测试套,即多个测 ...

  3. 重构指南 - 封装条件(Encapsulate Conditional)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用.   当代码中包含 ...

  4. 重构指南 - 封装集合(Encapsulate Collection)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...

  5. web 自动化测试 selenium基础到应用(目录)

    第一章   自动化测试前提及整体介绍 1-1功能测试和自动化测试的区别 1-2自动化测试流程有哪些 1-3自动化测试用例和手工用例的区别 1-4 自动化测试用例编写 1-5 selenium的优势以及 ...

  6. 重构24-Remove Arrowhead Antipattern(去掉箭头反模式)

    基于c2的wiki条目.Los Techies的Chris Missal同样也些了一篇关于反模式的post.  简单地说,当你使用大量的嵌套条件判断时,形成了箭头型的代码,这就是箭头反模式(arrow ...

  7. c# 面相对象2-之封装性

    一.封装特性: 这是一种隐藏的特性.可以用一个公式来展示类的封装特性: 封装的类=数据  +  对此数据进行的操作(即算法) 通俗的说,封装就是:包起外界不必要知道的东西,只向外界展露可供展示的东西. ...

  8. JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)

    本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...

  9. Swashbuckle.AspNetCore3.0的二次封装与使用

    关于 Swashbuckle.AspNetCore3.0 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...

随机推荐

  1. CQOI2013 新数独

    传送门 这道题也是很暴力的搜索啊…… 因为数独一开始全是空的,只有许许多多的大小限制条件,那也没必要纠结从哪开始搜索了,直接暴力搜索之后判断一下是否合法. 这题最恶心的是读入.现学了一招判断点在哪个块 ...

  2. OCCI编程接口介绍

    OCCI简介 Oracle® C++ Call Interface (OCCI) 是一套应用程序编程接口,它允许C++程序与一个或者多个Oracle数据库进行交互.OCCI给予你强大的数据库操作能力, ...

  3. 关于HibernateDaoSupport中的getHibernateTemplate().execute及executeFind方法

    转自:https://blog.csdn.net/angus_17/article/details/8501668 1. 这两个方法都是为了Spring在接管Hibernate之后,可以对Hibern ...

  4. k8s-网络插件flannel-十八

    一.kubernetes的网络模式  (1)Kubernetes网络需要解决的问题 集群内: 容器与容器之间的通信 Pod和Pod之间的通信 Pod和服务之间的通信 集群外: 外部应用与服务之间的通信 ...

  5. java形式参数分别是基本类型和引用类型的调用

    什么是形式参数,基本类型,引用类型? 形式参数(形参)百度百科里的解释是:在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数. 通俗的说就是:形式参数是指在函数名后面的小括号里 ...

  6. 014--python运算符和作业改进

    一.运算符 % 取模,返回商的余数 10/3     3.33333333335 10//3    3   地板除,取整数,不是四舍五入 a = 3  b = 5  ----->   a< ...

  7. bzoj 2780: [Spoj]8093 Sevenk Love Oimaster【广义SAM】

    AC自动机比较简单,把询问串做成AC自动机然后模板串边跑变更新即可 SAM是把模板串做成广义SAM,然后每个节点存有几个模板串经过,具体方法是每次更新暴力向上跳直到有时间戳我不会证为什么时间复杂度是对 ...

  8. git 命令参考手册

    你的本地仓库由 git 维护的三棵“树”组成.第一个是你的 工作目录,它持有实际文件:第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动:最后是 HEAD,指向你最近一次提交后的结果. ...

  9. Nginx(四) nginx+consul+upasync 在ubnutu18带桌面系统 实现动态负载均衡

    1.1 什么是动态负载均衡 传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf文件,因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upstream可配置化 ...

  10. 左耳朵耗子:我对 GitLab 误删除数据库事件的几点思考

    参考链接:https://www.infoq.cn/article/some-thoughts-on-gitlab-accidentally-deleting-database 太平洋时间 2017 ...