记录java+testng运行selenium(二)---定义元素类及浏览器

一: 元素类

整体思路:

1. 根据状态可分可见和不可见两种

2. 同一个路径可以查找单个元素或多个元素

3. 获取元素text或者指定的value值

4. selenium对元素操作有两种,一是通过By来操作,二是通过js来操作

 

二: 浏览器

整体思路:

1. 区分四种浏览器的调用

2. 设置每个浏览器的配置

3. 打开跟关闭浏览器

 

三:元素实现方式

定义一个接口InterfaceShow,两个实现类ExecuteProtogenesis和ExecuteFramework

InterfaceShow:主要列出函数。

ExecuteProtogenesis: 主要运行selenium内置函数来实现预期

ExecuteFramework:主要运行js来实现效果

 

InterfaceShow代码如下:

 1 package toolskit.exhibition;
 2 
 3 import org.openqa.selenium.WebElement;
 4 
 5 import java.util.List;
 6 
 7 /**
 8  * 实现类为:
 9  * ExecuteProtogenesis : 主要运行js来实现效果
10  * ExecuteFramework : 主要运行selenium内置函数来实现预期
11  */
12 public interface InterfaceShow {
13 
14     /**
15      * 用于判断元素是否可见或焦点是否集中在该元素上
16      * @param elePath 元素路径
17      * @param eleType 路径类型
18      */
19     WebElement VisibleFocus(String elePath, String eleType);
20 
21     /**
22      * 根据路径获取相关联的全部元素
23      * @param elePath 元素路径
24      * @param eleType 路径类型
25      * @return 返回路径下的全部元素
26      */
27     List<WebElement> VisibleFocusGruop(String elePath, String eleType);
28 
29     /**
30      * 用于判断元素是否隐藏或焦点是否该元素上失去
31      * @param elePath 元素路径
32      * @param eleType 路径类型
33      */
34     boolean HideFocus(String elePath, String eleType);
35 
36     /**
37      * 找到元素后进行输入操作或直接通过js进行输入操作
38      * @param elePath 元素路径
39      * @param eleType 元素对象
40      * @param eleData 输入内容
41      */
42     void HandleVisibleInput(String elePath, String eleType, WebElement pageTab, String eleData);
43 
44     /**
45      * 找到元素后进行点击操作或直接通过js进行点击操作
46      * @param elePath 元素路径
47      * @param eleType 路径类型
48      */
49     void HandleVisibleTouch(String elePath, String eleType, WebElement pageTab);
50 
51     /**
52      * 通过元素来执行输入操作或者指定元素来执行js输入操作
53      * @param pageTab 元素本身
54      * @param eleData 输入内容
55      */
56     void PerformInputAction(WebElement pageTab, String eleData);
57 
58     /**
59      * 通过元素来执行点击操作或者指定元素来执行js点击操作
60      * @param pageTab 元素本身
61      */
62     void PerformTouchAction(WebElement pageTab);
63 
64 
65     /**
66      * 获取元素的属性或者text
67      * @param elePath 元素路径
68      * @param eleType 路径类型
69      * @param pageTab 元素本身
70      * @return 返回元素的text或者指定value值
71      */
72     String getAttributeTextValue(String elePath, String eleType, WebElement pageTab, String valueType);
73 }

 

ExecuteProtogenesis代码如下(js这块还有一些问题):

  1 package toolskit.exhibition;
  2 
  3 import java.util.List;
  4 
  5 import org.openqa.selenium.*;
  6 
  7 
  8 
  9 
 10 /**
 11  * 该函数尚未完成
 12  */
 13 public class ExecuteProtogenesis implements InterfaceShow {
 14 
 15     private   JavascriptExecutor driver_js ;
 16 
 17     public ExecuteProtogenesis(WebDriver driver){
 18         this.driver_js = ((JavascriptExecutor) driver);
 19 
 20     }
 21     /**
 22      * 通过js来查找元素
 23      * @param elePath 元素路径
 24      * @param eleType 路径类型;目前没用到。
 25      * @return 单个元素对象
 26      */
 27     @Override
 28     public WebElement VisibleFocus(String elePath, String eleType) {
 29        return null;
 30 
 31     }
 32 
 33     /**
 34      *
 35      * @param elePath 元素路径
 36      * @param eleType 路径类型
 37      * @return 返回路径下的全部元素
 38      */
 39     @Override
 40     public List<WebElement> VisibleFocusGruop(String elePath, String eleType) {
 41         return null;
 42     }
 43 
 44     /**
 45      * 通过js来判断元素是否隐藏;该函数有坑不建议用
 46      * @param elePath 元素路径
 47      * @param eleType 路径类型;目前尚未使用
 48      * @return 布尔值
 49      */
 50     @Override
 51     public boolean HideFocus(String elePath, String eleType) {
 52         return false;
 53     }
 54 
 55     /**
 56      * 通过js来对元素进行输入操作
 57      * @param elePath 元素路径
 58      * @param eleType 元素对象
 59      * @param eleData 输入内容
 60      */
 61     @Override
 62     public void HandleVisibleInput(String elePath,  String eleType,WebElement pageTab, String eleData) {
 63 
 64     }
 65 
 66     /**
 67      * 通过js来对元素进行点击操作
 68      * @param elePath 元素路径
 69      * @param eleType 路径类型
 70      */
 71     @Override
 72     public void HandleVisibleTouch(String elePath,  String eleType,WebElement pageTab) {
 73 
 74     }
 75 
 76     /**
 77      * 通过已找到的元素进行输入操作
 78      * @param pageTab 元素本身
 79      * @param eleData 输入内容
 80      */
 81     @Override
 82     public void PerformInputAction(WebElement pageTab, String eleData) {
 83         driver_js.executeScript("arguments[0].value='" + eleData + "'", pageTab);
 84     }
 85     /**
 86      * 通过已找到的元素进行点击操作
 87      * @param pageTab 元素本身
 88      */
 89     @Override
 90     public void PerformTouchAction(WebElement pageTab) {
 91         driver_js.executeScript("arguments[0].click()", pageTab);
 92     }
 93 
 94     @Override
 95     public String getAttributeTextValue(String elePath, String eleType, WebElement pageTab,String valueType) {
 96         String text = (String) driver_js.executeScript("return arguments[0].value", pageTab);
 97         if (text==null){
 98             text = "";
 99         }
100         return text;
101     }
102 
103 }

ExecuteFramework代码如下:

  1 package toolskit.exhibition;
  2 
  3 import java.util.List;
  4 
  5 import org.openqa.selenium.By;
  6 import org.openqa.selenium.TimeoutException;
  7 import org.openqa.selenium.WebDriver;
  8 import org.openqa.selenium.WebElement;
  9 import org.openqa.selenium.support.ui.ExpectedConditions;
 10 import org.openqa.selenium.support.ui.WebDriverWait;
 11 import org.testng.Assert;
 12 
 13 
 14 public class ExecuteFramework implements  InterfaceShow {
 15 
 16     WebDriver driver;
 17 
 18     private final int TIME_OUT_SECONDS = 5 ;
 19 
 20     public ExecuteFramework(WebDriver driver){
 21         this.driver = driver;
 22     }
 23 
 24     public By distinguishByAttribute(String elePath, String pathType) {
 25         By eleBy ;
 26         if(elePath ==null||elePath.equals("")||pathType ==null||pathType.equals("")){
 27             return null;
 28         }
 29 
 30         switch (pathType) {
 31             case "id":
 32                 eleBy = By.id(elePath);
 33                 break;
 34             case "xpath":
 35                 eleBy = By.xpath(elePath);
 36                 break;
 37             case "css":
 38                 eleBy = By.cssSelector(elePath);
 39                 break;
 40             case "name":
 41                 eleBy = By.name(elePath);
 42                 break;
 43             default:
 44                 eleBy = null;
 45         }
 46         return eleBy;
 47     }
 48 
 49     @Override
 50     public WebElement VisibleFocus(String elePath, String eleType) {
 51         By by = distinguishByAttribute(elePath, eleType);
 52         if (by == null){
 53             Assert.assertFalse(false);
 54         }
 55         WebElement username = null;
 56         try {
 57             username = new WebDriverWait(driver, TIME_OUT_SECONDS)
 58                     .until(ExpectedConditions.visibilityOfElementLocated(by));
 59         } catch (TimeoutException a) {
 60             a.printStackTrace();
 61         }
 62 
 63         return username;
 64     }
 65 
 66     @Override
 67     public List<WebElement> VisibleFocusGruop(String elePath, String eleType) {
 68         By by = distinguishByAttribute(elePath, eleType);
 69         if (by == null){
 70             Assert.assertFalse(false);
 71         }
 72         List<WebElement> eleList =null;
 73         try {
 74             eleList = new WebDriverWait(driver, TIME_OUT_SECONDS)
 75                     .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(by));
 76         } catch (TimeoutException a) {
 77             a.printStackTrace();
 78         }
 79         return eleList;
 80     }
 81 
 82     @Override
 83     public boolean HideFocus(String elePath, String eleType) {
 84         By by = distinguishByAttribute(elePath, eleType);
 85         if (by == null){
 86             Assert.assertFalse(false);
 87         }
 88         //页面元素在页面是否存在
 89         boolean hide= false;
 90         try {
 91             WebElement  until = new WebDriverWait(driver, TIME_OUT_SECONDS).until(ExpectedConditions.presenceOfElementLocated(by));
 92             if(until != null){
 93                 hide = true;
 94             }
 95         } catch (TimeoutException a) {
 96 //            a.printStackTrace();
 97         }
 98         return hide;
 99     }
100 
101     @Override
102     public void HandleVisibleInput(String elePath, String eleType, WebElement pageTab, String eleData) {
103         if (pageTab!=null) {
104             PerformInputAction(pageTab, eleData);
105         }else{
106              pageTab = VisibleFocus(elePath, eleType);
107             if (pageTab!=null){
108                 PerformInputAction(pageTab,eleData);
109             }
110         }
111     }
112 
113     @Override
114     public void HandleVisibleTouch(String elePath, String eleType,WebElement pageTab) {
115         if (pageTab!=null){
116             PerformTouchAction(pageTab);
117         }else {
118             pageTab = VisibleFocus(elePath, eleType);
119             if (pageTab!=null){
120                 PerformTouchAction(pageTab);
121             }
122         }
123     }
124 
125     @Override
126     public void PerformInputAction(WebElement pageTab, String eleData) {
127         try {
128             pageTab.clear();
129             pageTab.sendKeys(eleData);
130             Thread.sleep(1000);
131         } catch (InterruptedException e) {
132             e.printStackTrace();
133         }
134     }
135 
136     @Override
137     public void PerformTouchAction(WebElement pageTab) {
138         try {
139             pageTab.click();
140             Thread.sleep(1000);
141         } catch (InterruptedException e) {
142             e.printStackTrace();
143         }
144     }
145     private String getElementValue(WebElement pageTab,String valueType){
146         String textValue ;
147 
148 
149         if (valueType.equalsIgnoreCase("text")){
150             textValue = pageTab.getText();
151 
152         }else {
153             textValue = pageTab.getAttribute(valueType);
154         }
155         return textValue;
156     }
157     @Override
158     public String getAttributeTextValue(String elePath, String eleType, WebElement pageTab,String valueType) {
159         if(pageTab==null){
160             pageTab = VisibleFocus(elePath, eleType);
161         }
162 
163         String value = getElementValue(pageTab, valueType);
164         return value;
165     }
166 }

 

四:浏览器实现方式---采用工厂模式

CarrierDriver 为工厂接口类,

BrowserDriver 为工厂实现父类

ChromeBrowser/FireFoxBrowser/WinEdgeBrowser/WinIEBrowser:作为子类分别继承BrowserDriver

DriverFactory:工厂判断类,通过传入浏览器的类型来创建相应的工厂浏览器类

整体代码比较多,可以到上一篇文件中下载源码。https://www.cnblogs.com/xiaodingdong/p/11718667.html

 

说明:

toolskit\incomprehension : 目录下自定义的错误类是拿网上的,网址没保留。这里不方便贴出。有需要的可以拿来使用。

 

posted on 2019-10-22 15:05  叮咚丶哈哈  阅读(290)  评论(0编辑  收藏  举报

导航