Selenium 更強的查找元素的方法

package demo.skillport;

import java.io.File;
import java.util.List;

import junit.framework.Assert;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.android.AndroidDriver;

public class Test{
	private static final double CAPTURE_TIME_WAIT = 10;
	private static final boolean FOUND = true;
	private static final boolean NOT_FOUND = false;
	private AndroidDriver driver;
	private String captureDir = "C:\\";
	
	public Test(){
		driver = new AndroidDriver();
	}
	public Test(AndroidDriver driver){
		this.driver = driver;
	}
	/*這個方法中,使用By(通常使用By.xpath)來獲取元素,同時給一個name來幫助查找/定位元素,
	至於如何獲取該元素中的name,則由type來選擇
	*/
	public WebElement getElementWithName(By by, String name, String type) {
		// 獲取元素列表
		List<WebElement> wel = driver.findElements(by);
		String method="";
		if(type.equals("tagName")){
			method = "getTagName()";
		}
		else if(type.equals("text")){
			method = "getText()";
		}
		for (WebElement w : wel) {
			String eText="";
			// 通過遍歷元素及對應的方法獲得eText內容
			if(null != w){
				if(type.equals("tagName")){
					eText = w.getTagName();
				}
				else if(type.equals("text")){
					eText = w.getText();
				}
					
			}
			// 對內容和給出的name進行比對,只要eText中包含name並滿足其他條件,則返回該元素
			if (!eText.isEmpty() && -1 != eText.indexOf(name) && w.isEnabled()) 
			{
				logElementCheck(name, FOUND);
				return w;
			}
		}
		logElementCheck(name, NOT_FOUND);
		String timeStamp = String.valueOf(System.currentTimeMillis());
		captureScreen(captureDir, 
				String.format("%s_%s.png", timeStamp, name),
				String.format("(%s.%s == %s) is not found", by.toString(), method, name));
		return null;
	}

	private void captureScreen(String dirName, String photoName, String errMsg){
        try {
            sleep(CAPTURE_TIME_WAIT);
            File scrFile = driver.getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(scrFile, new File(dirName + "//" + photoName));
        } catch (Exception e) {
            e.printStackTrace();
        }
        logErr(String.format("%s. Snapshot is: %s", errMsg, photoName));
        Assert.assertNotNull(null);
    }

	private static void sleep(double seconds) {
		try {
			Thread.sleep((long) (seconds * 1000));
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	private void logElementCheck(Object element, boolean isFound) {
		if(isFound)
			System.out.println(String.format("---><] %s is found.", element.toString()));
		else
			System.out.println(String.format("---><] %s is not found.", element.toString()));
	}
	
	private static void logErr(Object str) {
		System.err.println("err ] " + str.toString());
	}
	

	
}


發佈了26 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章