Selenium框架源码解析-1 PageFactory
来源:互联网 发布:js 指定时间转时间戳 编辑:程序博客网 时间:2024/06/07 20:07
Selenium框架源码解析-1 PageFactory
前提:
几天前接触到Selenium,看到定义的变量不需要实例化就可以直接运行,觉得挺稀奇,故想一览其中之奥妙,取其中之精华。
直接上码:
package com.prs.t;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.PageFactory;public class LoginPage { private WebDriver webdriver; public WebElement su; public WebElement kw; public LoginPage(WebDriver webdriver){ this.webdriver = webdriver; PageFactory.initElements(webdriver, this); } public void inputAndClickSerch() throws InterruptedException{ kw.sendKeys("selenium测试"); su.click(); Thread.sleep(3000); System.out.println("getTitle--->"+webdriver.getTitle()); }}
问题:上面WebElement su及WebElement kw是怎么被实例化的?
PageFactory.initElements(webdriver, this)
这句代码,初始化Element,跑进去看看
public static void initElements(WebDriver driver, Object page) { final WebDriver driverRef = driver; initElements(new DefaultElementLocatorFactory(driverRef), page); }
并没有看到赋值继续走
public static void initElements(ElementLocatorFactory factory, Object page) { final ElementLocatorFactory factoryRef = factory; initElements(new DefaultFieldDecorator(factoryRef), page); }
继续
public static void initElements(FieldDecorator decorator, Object page) { Class<?> proxyIn = page.getClass(); // 取得LoginPage.class while (proxyIn != Object.class) { proxyFields(decorator, page, proxyIn); //跟进去看看 proxyIn = proxyIn.getSuperclass(); } }
看到下面的代码有没有熟悉的感觉,没错就是根据反射取得该类的Filed: Field[] fields = proxyIn.getDeclaredFields();
在对其进行赋值操作:
field.setAccessible(true);
field.set(page, value);
private static void proxyFields(FieldDecorator decorator, Object page, Class<?> proxyIn) { Field[] fields = proxyIn.getDeclaredFields(); for (Field field : fields) { Object value = decorator.decorate(page.getClass().getClassLoader(), field); if (value != null) { try { field.setAccessible(true); field.set(page, value); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } } }
以上就是PageFactory如何对WebElenment赋值操作的,但是问题又来了值从哪儿来?见下回分解
0 0
- Selenium框架源码解析-1 PageFactory
- Selenium源码之PageFactory
- Selenium PageFactory
- Selenium的POM和PAGEFACTORY的理解
- PageFactory
- Selenium的PageFactory & PageObject 在大型项目中的应用
- Selenium的PageFactory & PageObject 在大型项目中的应用
- java-selenium自动化测试page object、pageFactory 设计模式
- MPlayer 源码框架解析
- ci框架源码解析
- 源码解析Volley框架
- openwrt源码框架解析
- openwrt源码框架解析
- Volley框架源码解析
- volley框架源码解析
- LeakCanary框架源码解析
- Logger框架源码解析
- PHP CodeIgniter框架源码解析
- android 软键盘 InputMethodManager
- CheckBoxList控件绑定数据和设置选定项
- light oj 1085
- 自己经常去的网站记录
- Oracle子查询
- Selenium框架源码解析-1 PageFactory
- Servlet的一点零碎知识
- 测试人员如何搭建自动打包部署平台?(具体详细步骤及下载地址)
- 在Mac上搭建Nginx服务器(视频直播)
- 55. Jump Game(重要)
- #451 Swap Nodes in Pairs
- session的个人理解
- 混合现实VR Twitch视频
- solr中DIH关于Oracle数据中clob类型字段的配置